數據庫連接池
概念
一個容器(集合),存放數據庫連接的容器。
當系統初始化好後,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之後,會將連接對象歸還給容器。
好處
-
節約資源
-
用戶訪問高效
實現
標準接口
javax.sql包下的DataSource接口
方法:
- 獲取連接:getConnection()
- 歸還連接:Connection.close()。
如果連接對象Connection是從連接池中獲取的,那麼調用Connection.close()方法,則不會再關閉連接了。而是歸還連接。
數據庫廠商實現
-
C3P0:數據庫連接池技術
-
Druid:數據庫連接池實現技術,由阿里巴巴提供的
C3P0:數據庫連接池技術
- 步驟:
-
導入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar
* 不要忘記導入數據庫驅動jar包 -
定義配置文件:
* 名稱: c3p0.properties 或者 c3p0-config.xml
* 路徑:直接將文件放在src目錄下即可。 -
創建核心對象 數據庫連接池對象 ComboPooledDataSource
-
獲取連接: getConnection
- 代碼:
//1.創建數據庫連接池對象
DataSource ds = new ComboPooledDataSource();
//2. 獲取連接對象
Connection conn = ds.getConnection();
Druid:數據庫連接池實現技術
*步驟:
-
導入jar包 druid-1.0.9.jar
-
定義配置文件:
* 是properties形式的
* 可以叫任意名稱,可以放在任意目錄下 -
加載配置文件。Properties
-
獲取數據庫連接池對象:通過工廠來來獲取 DruidDataSourceFactory
-
獲取連接:getConnection
- 代碼:
//3.加載配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//4.獲取連接池對象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//5.獲取連接
Connection conn = ds.getConnection();
-
定義工具類
-
定義一個類 JDBCUtils
-
提供靜態代碼塊加載配置文件,初始化連接池對象
-
提供方法
1. 獲取連接方法:通過數據庫連接池獲取連接
2. 釋放資源
3. 獲取連接池的方法
- 代碼:
public class JDBCUtils {
//1.定義成員變量 DataSource
private static DataSource ds ;
static{
try {
//1.加載配置文件
Properties pro = new Properties();
pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
//2.獲取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 獲取連接
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 釋放資源
*/
public static void close(Statement stmt,Connection conn){
/* if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();//歸還連接
} catch (SQLException e) {
e.printStackTrace();
}
}*/
close(null,stmt,conn);
}
public static void close(ResultSet rs , Statement stmt, Connection conn){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();//歸還連接
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 獲取連接池方法
*/
public static DataSource getDataSource(){
return ds;
}
}