1.爲什麼要有數據庫連接池
數據庫連接池的基本思想就是爲數據庫連接建立一個“緩衝池”。預先在緩衝池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩衝池”中取出一個,使用完畢之後再放回去。數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重複使用一個現有的數據庫連接,而不是重新建立一個。
2.數據庫連接池原理
3.兩種開源的數據庫連接池
1)JDBC 的數據庫連接池使用 javax.sql.DataSource 來表示,DataSource 只是一個接口,該接口通常由服務器(Weblogic, WebSphere, Tomcat)提供實現,也有一些開源組織提供實現:DBCP 數據庫連接池;C3P0 數據庫連接池。
2)DataSource 通常被稱爲數據源,它包含連接池和連接池管理兩個部分,習慣上也經常把 DataSource 稱爲連接池
4.DBCP(database connection pool)
1)BasicDataSource
/**
* 如何使用DBCP?
* 1. 加入DBCP 的 jar 包(兩個:dbcp和pool)
* 2. 創建數據庫連接池
* 3. 從數據庫連接池中獲取數據庫連接
*
* @throws SQLException
*/
@Test
public void testBasicDS() throws SQLException {
// 1.創建DataSource對象
BasicDataSource dataSource = new BasicDataSource();
// 2.設置數據庫連接的參數:用戶名、密碼、數據庫全類名、數據庫連接地址
dataSource.setUsername("root");
dataSource.setPassword("123456");
dataSource.setUrl("jdbc:mysql:///zhaoliang");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
// 3.指定數據源的一些可選屬性
//1)指定數據庫連接池初始化的連接個數
dataSource.setInitialSize(10);
//2)指定最大連接數:同一時刻向數據庫申請的連接數
dataSource.setMaxActive(20);
//3)指定最小空閒連接數:在連接池中保存的最小的空閒連接數
dataSource.setMinIdle(5);
//4)指定等待數據庫連接池分配連接的最長時間,單位爲毫秒,超出等待時間將拋出異常
dataSource.setMaxWait(5000);
// 4.從數據源中獲取數據庫連接
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
2)BasicDataSourceFactory
@Test
public void testBasicDSFactory() throws Exception {
Properties properties = new Properties();
InputStream inStream = this.getClass().getClassLoader()
.getResourceAsStream("jdbc.properties");
properties.load(inStream);
DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
Connection connection = null;
try {
connection = dataSource.getConnection();
System.out.println(connection);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(connection != null){
connection.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}