連接池
阿新 • • 發佈:2017-05-07
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"); //View Code數據庫連接字符串 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
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的包中拷貝到工程中。
連接池