1. 程式人生 > >連接池

連接池

mysq 導入 insert pst created 操作 應用服務 lose get

在對數據庫進行操作的時候,會出現頻繁的連接打開和關閉的情況;數據庫連接資源非常寶貴,為了避免頻繁連接對運行效率的影響就出現了連接池技術。

常用的連接池技術有:

1、DBCP

2、C3P0

以上連接池的實現是對Sun公司提供的連接池接口(javax.sql.DataSource)的實現。

DBCP連接池

DBCP 是 Apache 軟件基金組織下的開源連接池實現,使用DBCP數據源,應用程序應在系統中增加如下兩個 jar 文件:
  1、Commons-dbcp.jar:連接池的實現
  2、Commons-pool.jar:連接池實現的依賴庫
Tomcat 的連接池正是采用該連接池來實現的。該數據庫連接池既可以與應用服務器整合使用,也可由應用程序獨立使用。

核心類:BasicDataSource

需要引入的jar文件:commons-dbcp-1.4.jar 、 commons-pool-1.5.6.jar

DBCP連接池API及使用示例

1、基本使用-硬編碼方式

技術分享
 1 public void testDbcp() throws Exception {
 2         // DBCP連接池核心類
 3         BasicDataSource dataSouce = new BasicDataSource();
 4         // 連接池參數配置:初始化連接數、最大連接數 / 連接字符串、驅動、用戶、密碼
 5         dataSouce.setUrl("jdbc:mysql:///jdbc_demo");            //
數據庫連接字符串 6 dataSouce.setDriverClassName("com.mysql.jdbc.Driver"); //數據庫驅動 7 dataSouce.setUsername("root"); //數據庫連接用戶 8 dataSouce.setPassword("root"); //數據庫連接密碼 9 dataSouce.setInitialSize(3); // 初始化連接 10 dataSouce.setMaxActive(6); //
最大連接 11 dataSouce.setMaxIdle(3000); // 最大空閑時間 12 13 // 獲取連接 14 Connection con = dataSouce.getConnection(); 15 con.prepareStatement("delete from admin where id=3").executeUpdate(); 16 // 關閉 17 con.close(); 18 } 19
View Code

2、從配置文件中讀取配置

技術分享
 1 // 2. 【推薦】配置方式實現連接池  ,  便於維護
 2     public void testProp() throws Exception {
 3         // 加載prop配置文件
 4         Properties prop = new Properties();
 5         // 獲取文件流
 6         InputStream inStream = App_DBCP.class.getResourceAsStream("db.properties");
 7         // 加載屬性配置文件
 8         prop.load(inStream);
 9         // 根據prop配置,直接創建數據源對象
10         DataSource dataSouce = BasicDataSourceFactory.createDataSource(prop);
11         
12         // 獲取連接
13         Connection con = dataSouce.getConnection();
14         con.prepareStatement("delete from admin where id=4").executeUpdate();
15         // 關閉
16         con.close();
17     }
18 }
View Code

註意:配置文件中的key與BaseDataSource中的屬性一樣。

例如:

url=jdbc:mysql:///jdbc_demo
driverClassName=com.mysql.jdbc.Driver
username=root
password=root
initialSize=3
maxActive=6
maxIdle=3000

C3P0連接池

最常用的連接池技術!Spring框架,默認支持C3P0連接池技術!

核心類:CombopooledDataSource

引入的jar文件:c3p0-0.9.1.2.jar

常用API及示例

1、硬編碼方式

技術分享
 1 //1. 硬編碼方式,使用C3P0連接池管理連接 
 2     public void testCode() throws Exception {
 3         // 創建連接池核心工具類
 4         ComboPooledDataSource dataSource = new ComboPooledDataSource();
 5         // 設置連接參數:url、驅動、用戶密碼、初始連接數、最大連接數
 6         dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc_demo");
 7         dataSource.setDriverClass("com.mysql.jdbc.Driver");
 8         dataSource.setUser("root");
 9         dataSource.setPassword("root");
10         dataSource.setInitialPoolSize(3);
11         dataSource.setMaxPoolSize(6);
12         dataSource.setMaxIdleTime(1000);
13         
14         // ---> 從連接池對象中,獲取連接對象
15         Connection con = dataSource.getConnection();
16         // 執行更新
17         con.prepareStatement("delete from admin where id=7").executeUpdate();
18         // 關閉
19         con.close();
20     }
View Code

2、XML配置方式

技術分享
 1 //2. XML配置方式,使用C3P0連接池管理連接
 2     public void testXML() throws Exception {
 3         // 創建c3p0連接池核心工具類
 4         // 自動加載src下c3p0的配置文件【c3p0-config.xml】
 5         ComboPooledDataSource dataSource = new ComboPooledDataSource();// 使用默認的配置
 6         PreparedStatement pstmt = null;
 7         
 8         // 獲取連接
 9         Connection con = dataSource.getConnection();
10         for (int i=1; i<11;i++){
11             String sql = "insert into employee(empName,dept_id) values(?,?)";
12             // 執行更新
13             pstmt = con.prepareStatement(sql);
14             pstmt.setString(1, "Rose" + i);
15             pstmt.setInt(2, 1);
16             pstmt.executeUpdate();
17         }
18         pstmt.close();
19         // 關閉
20         con.close();
21         
22     }
View Code

註意:xml的名字為:c3p0-config.xml,導入時從c3p0的包中拷貝到工程中。

連接池