今日內容
- 數據庫連接池
- Spring JDBC : JDBC Template
1 數據庫連接池
1.1 概念
其實就是一個容器(集合),存放數據庫連接的容器。
當系統初始化好後,容器被創建,容器會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之後,會將連接對象歸還給容器。
1.2 好處:
- 節約資源
- 用戶訪問高效
1.3 實現:
- 標準接口:DataSource javax.sql包下的
- 獲取連接:getConnection()
- 歸還連接:Connection.close()
*如果連接對象Connection是連接池中獲取的,那麼調用Connection.close()方法不會關閉連接,而是歸還到連接池。
- 一般我們不去實現它,由數據庫廠商來實現
- C3P0:連接池舊技術,不常用
- Druid:阿里巴巴提供的新技術,效率更高
1.4 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();
1.5 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
- 提供靜態代碼塊加載配置文件,初始化連接池對象
- 獲取連接池的方法
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.printStackTrance(); } } //獲取連接 public static Connection getConnection() throw 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; } }