天天看點

c3p0連接配接池配置_(五)JDBC連接配接池

c3p0連接配接池配置_(五)JDBC連接配接池
一、介紹

1、連接配接池是建立和管理一個連接配接的緩沖池的技術,這些連接配接準備好被任何需要它們的線程使用

2、作用

連接配接對象建立和銷毀是需要耗費時間的,在伺服器初始化的時候就初始化一些連接配接。把這些連接配接放入到記憶體中,使用的時候可以從記憶體中擷取,使用完成之後将連接配接放入連接配接池中。從記憶體中擷取和歸還的效率要遠遠高于建立和銷毀的效率,提升性能。

二、常見的開源連接配接池
  • druid

     Druid阿裡旗下開源連接配接池産品

  • C3P0

    C3P0是一個開放源代碼的JDBC連接配接池,Hibernate的發行包中預設使用此連接配接池。據說性能最好。

三、DBUtils

Commons DbUtils是Apache組織提供的一個對JDBC進行簡單封裝的開源工具類庫,使用它能夠簡化JDBC應用程式的開發,同時也不會影響程式的性能

四、druid的使用

1、添加maven

<dependency>    <groupId>com.alibabagroupId>    <artifactId>druidartifactId>    <version>1.1.23version>dependency>
           

2、db.properties放在src目錄下

#key=valuedriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydb?rewriteBatchedStatements=true#url=jdbc:mysql://localhost:3306/mysqldbusername=rootpassword=rootinitialSize=10minIdle=5maxActive=20maxWait=5000
           

3、代碼

@Test    /**     * Druid的使用:     * * 配置方式設定參數     * Druid配置方式可以使用屬性檔案配置的。     * * 檔案名稱沒有規定但是屬性檔案中的key要一定的。     */    public void druid(){        Connection conn = null;        PreparedStatement pstmt = null;        ResultSet rs = null;        try{            // 使用連接配接池:            // 從屬性檔案中擷取:            Properties properties = new Properties();            properties.load(new FileInputStream("src/druid.properties"));            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);            // 獲得連接配接:            conn = dataSource.getConnection();            // 編寫SQL:            String sql = "select * from account";            // 預編譯SQL:            pstmt = conn.prepareStatement(sql);            // 設定參數:            // 執行SQL:            rs = pstmt.executeQuery();            while(rs.next()){                System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));            }        }catch(Exception e){            e.printStackTrace();        }finally{            JDBCUtil.release(rs, pstmt, conn);        }    }
           

五、c3P0

1、maven

<dependency>    <groupId>c3p0groupId>    <artifactId>c3p0artifactId>    <version>0.9.1.2version>dependency>
           

2、c3p0-config.xml配置檔案,eclipse放在src目錄下,idea放在resource目錄下

<?xml version="1.0" encoding="UTF-8"?>            ="driverClass">com.mysql.jdbc.Driver        ="jdbcUrl">jdbc:mysql:///mydb        ="user">root        ="password">root        ="initialPoolSize">5        ="minPoolSize">5        ="maxPoolSize">20    
           

3、代碼

@Test/** * 采用配置檔案的方式: */public void c3p0(){    Connection conn = null;    PreparedStatement pstmt = null;    ResultSet rs = null;    try{        // 獲得連接配接:從連接配接池中擷取:        // 建立連接配接池://建立連接配接池預設去類路徑下查找c3p0-config.xml        ComboPooledDataSource dataSource = new ComboPooledDataSource();        // 從連接配接池中獲得連接配接:        conn = dataSource.getConnection();        // 編寫SQL:        String sql = "select * from account";        // 預編譯SQL:        pstmt = conn.prepareStatement(sql);        // 執行SQL:        rs = pstmt.executeQuery();        while(rs.next()){            System.out.println(rs.getInt("id")+" "+rs.getString("name")+" "+rs.getDouble("money"));        }    }catch(Exception e){        e.printStackTrace();    }finally{        JDBCUtil.release(rs, pstmt, conn);    }}
           

六、c3p0連接配接池工具類

1、代碼

/** * JDBC的工具類 * @author jt * */public class JDBCUtils2 {   // 建立一個連接配接池:但是這個連接配接池隻需要建立一次即可。   private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();   /**    * 獲得連接配接的方法    * @throws SQLException    */   public static Connection getConnection() throws SQLException{      return dataSource.getConnection();   }   /**    * 獲得連接配接池:    */   public static DataSource getDataSource(){      return dataSource;   }   /**    * 釋放資源的方法    */   public static void release(Statement stmt,Connection conn){      if(stmt != null){         try {            stmt.close();         } catch (SQLException e) {            e.printStackTrace();         }         stmt = null;      }      if(conn != null){         try {            conn.close();         } catch (SQLException e) {            e.printStackTrace();         }         conn = null;      }   }   public static void release(ResultSet rs,Statement stmt,Connection conn){      // 資源釋放:      if(rs != null){         try {            rs.close();         } catch (SQLException e) {            e.printStackTrace();         }         rs = null;      }      if(stmt != null){         try {            stmt.close();         } catch (SQLException e) {            e.printStackTrace();         }         stmt = null;      }      if(conn != null){         try {            conn.close();         } catch (SQLException e) {            e.printStackTrace();         }         conn = null;      }   }}
           

繼續閱讀