同過使用C3P0建立的對mysql數據庫CRUD操作的工具類

jopen 10年前發布 | 17K 次閱讀 C3P0 Java開發
    package util;  
    import java.sql.Connection;  
    import java.sql.PreparedStatement;  
    import java.sql.ResultSet;  
    import java.sql.SQLException;  

    import com.mchange.v2.c3p0.ComboPooledDataSource;  

    public class JdbcUtilC3P0 {  
        // 創建連接池的數據源對象  
        // mysql指定的是從c3p0-config.xml配置文件中選擇那個鏈配置進行連接  
        private static ComboPooledDataSource cpds = new ComboPooledDataSource(  
                "mysql");  

        // 書寫返回連接對象的方法  
        public static Connection getConn() {  
            try {  
                return cpds.getConnection();  
            } catch (SQLException e) {  
                e.printStackTrace();  
            }  
            return null;  
        }  

        // 書寫cud的通用的方法  
        public static void update(String sql, Object params[]) {  
            // 聲明預處理對象  
            PreparedStatement pstmt = null;  
            try {  
                // 獲取預處理對象  
                pstmt = getConn().prepareStatement(sql);  
                // 為sql語句進行賦值處理  
                if (params != null) {  
                    for (int i = 0; i < params.length; i++) {  
                        // 為占位符賦值處理  
                        pstmt.setObject(i + 1, params[i]);  
                    }  
                    // 執行cud的操作  
                    pstmt.executeUpdate();  
                } else {  
                    System.out.println("參數列表為null");  
                }  

            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } finally {  
                release(null, pstmt, null);  
            }  
        }  

        // r的操作方法(查詢的操作處理  
        public static Object query(String sql, Object[] params,  
                ResultSetHandler resultSetHandler) {  
            PreparedStatement pstmt = null;  
            ResultSet rs = null;  
            try {  
                pstmt = getConn().prepareStatement(sql);  
                // 參數列表不為null  
                if (params != null) {  
                    // 循環賦值  
                    for (int i = 0; i < params.length; i++) {  
                        pstmt.setObject(i + 1, params[i]);  
                    }  
                }  
                //執行查詢  
                rs = pstmt.executeQuery();  
                //將rs結果集交給resultSetHandler處理對象進行處理,并將結果返回  
                return resultSetHandler.handler(rs);  

            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  

            return null;  
        }  

        // 釋放資源的操作  
        public static void release(ResultSet rs, PreparedStatement pstmt,  
                Connection conn) {  
            if (rs != null) {  
                try {  
                    rs.close();  
                } catch (SQLException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
            if (pstmt != null) {  
                try {  
                    pstmt.close();  
                } catch (SQLException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
            if (conn != null) {  
                try {  
                    conn.close();  
                } catch (SQLException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  

        }  
    }  

下面是用來處理接口

    package util;  

    import java.sql.ResultSet;  

    public interface ResultSetHandler {  
        // 交給調用者處理  
        public Object handler(ResultSet rs) throws Exception;  
    }  

下面是處理查詢單條數據時用到的處理類
    package util;  

    import java.lang.reflect.Field;  
    import java.sql.ResultSet;  
    import java.sql.ResultSetMetaData;  


    //這是獲取單個數據的處理類  
    public class BeanHandler implements ResultSetHandler {  

        // 聲明接收要處理的bean的class對象  
        private Class<?> cls;  

        // 構造器為接收的class賦值  
        public BeanHandler(Class<?> cls) {  
            super();  
            this.cls = cls;  
        }  

        // 處理接收到的對象  
        @Override  
        public Object handler(ResultSet rs) throws Exception {  
            // 判斷結果集中是否還有數據  
            if (rs.next()) {  
                // 同過反射處理獲取要處理class的對象  
                Object bean = cls.newInstance();  
                // 獲取ResultSet的元數據的ResultSetMetaData對象  
                ResultSetMetaData metaData = rs.getMetaData();  
                // 循環遍歷,為bean內的屬性賦值  
                for (int i = 1; i <= metaData.getColumnCount(); i++) {  
                    // 通過元數據獲取要賦值的數據字段  
                    String columnName = metaData.getColumnName(i);  
                    // 獲取字段對應額數據值  
                    Object columnValue = rs.getObject(columnName);  

                    // 通過反射獲取bean的字段名稱對應的Field對象  
                    // getDeclaredField("");獲取指定的字段已經聲明過的Field對象  
                    Field field = bean.getClass().getDeclaredField(columnName);  
                    // 設置暴力反射開啟  
                    field.setAccessible(true);  
                    // 為bean中的屬性賦值  
                    field.set(bean, columnValue);  
                }  
                // 返回設置屬性后的bean  
                return bean;  
            } else {  
                return null;  
            }  
        }  

    }  

下面是處理查詢多條數據時用到的處理類
    package util;  

    import java.lang.reflect.Field;  
    import java.sql.ResultSet;  
    import java.sql.ResultSetMetaData;  
    import java.util.ArrayList;  
    import java.util.List;  


    //這是獲取數據庫中所有的數據的處理類  
    public class BeanListHandler implements ResultSetHandler {  
        // 聲明接收要處理的bean的class對象  
        private Class<?> cls;  

        // 構造器為接收的class賦值  
        public BeanListHandler(Class<?> cls) {  
            super();  
            this.cls = cls;  
        }  

        // 處理接收到的對象  
        @Override  
        public Object handler(ResultSet rs) throws Exception {  
            // 聲明返回的數據集合  
            List<Object> list = new ArrayList<Object>();  
            // 判斷結果集中是否還有數據  
            while (rs.next()) {  
                // 同過反射處理獲取要處理class的對象  
                Object bean = cls.newInstance();  
                // 獲取ResultSet的元數據的ResultSetMetaData對象  
                ResultSetMetaData metaData = rs.getMetaData();  
                // 循環遍歷,為bean內的屬性賦值  
                for (int i = 1; i <= metaData.getColumnCount(); i++) {  
                    // 通過元數據獲取要賦值的數據字段  
                    String columnName = metaData.getColumnName(i);  
                    // 獲取字段對應額數據值  
                    Object columnValue = rs.getObject(columnName);  

                    // 通過反射獲取bean的字段名稱對應的Field對象  
                    // getDeclaredField("");獲取指定的字段已經聲明過的Field對象  
                    Field field = bean.getClass().getDeclaredField(columnName);  
                    // 設置暴力反射開啟  
                    field.setAccessible(true);  
                    // 為bean中的屬性賦值  
                    field.set(bean, columnValue);  
                }  
                // 將設置好的目標對象添加到list集合  
                list.add(bean);  
            }  
            return list;  
        }  
    }  

下面是通過C3P0連接數據時用到的連接配置文件
    <?xml version="1.0" encoding="UTF-8"?>  
    <c3p0-config>  
      <named-config name="xx">  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>          
        <property name="driverClass">com.mysql.jdbc.Driver</property>         
        <property name="user">root</property>         
        <property name="password">admin</property>  
        <property name="initialPoolSize">10</property>        
        <property name="maxPoolSize">30</property>  
        <property name="minPoolSize">10</property>  
        <property name="acquireIncrement">5</property>  
      </named-config>  

      <named-config name="mysql">  
            <property name="driverClass">com.mysql.jdbc.Driver</property>  
            <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>  
            <property name="user">root</property>  
            <property name="password">admin</property>  

            <property name="acquireIncrement">5</property>  
            <property name="initialPoolSize">10</property>  
            <property name="minPoolSize">5</property>  
            <property name="maxPoolSize">30</property>  
        </named-config>  
    </c3p0-config>  

c3p0的鏈接還需要用到

c3p0-0.9.5-pre6.jar

mchange-commons-java-0.2.6.3.jar

兩個包

來自:http://blog.csdn.net/dong_martin/article/details/17886147

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!