數據庫連接池
1. 概念:其實就是一個容器(集合),存放數據庫連接的容器。
當系統初始化好后,容器被創建,容器中會申請一些連接對象,當用戶來訪問數據庫時,從容器中獲取連接對象,用戶訪問完之后,會將連接對象歸還給容器。
2. 好處:
1. 節約資源
2. 用戶訪問高效
3. 實現:
1. 標准接口:DataSource javax.sql包下的
1. 方法:
* 獲取連接:getConnection()
* 歸還連接:Connection.close()。如果連接對象Connection是從連接池中獲取的,那么調用Connection.close()方法,則不會再關閉連接了。而是歸還連接
2. 一般我們不去實現它,有數據庫廠商來實現
1. C3P0:數據庫連接池技術
2. Druid:數據庫連接池實現技術,由阿里巴巴提供的
4. C3P0:數據庫連接池技術
* 步驟:
1. 導入jar包 (兩個) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
* 不要忘記導入數據庫驅動jar包
2. 定義配置文件:
* 名稱: c3p0.properties 或者 c3p0-config.xml
* 路徑:直接將文件放在src目錄下即可。
3. 創建核心對象 數據庫連接池對象 ComboPooledDataSource
4. 獲取連接: getConnection
代碼:
//1.創建數據庫連接池對象
DataSource ds = new ComboPooledDataSource();
//2. 獲取連接對象
Connection conn = ds.getConnection();
public class C3P0demo1 { public static void main(String[] args) throws SQLException { //1創建數據庫連接對象 DataSource ds = new ComboPooledDataSource(); //2獲取連接對象 Connection conn = ds.getConnection(); System.out.println(conn); } }
5. Druid:數據庫連接池實現技術,由阿里巴巴提供的
1. 步驟:
1. 導入jar包 druid-1.0.9.jar
2. 定義配置文件:
* 是properties形式的
* 可以叫任意名稱,可以放在任意目錄下
3. 加載配置文件。Properties
4. 獲取數據庫連接池對象:通過工廠來來獲取 DruidDataSourceFactory
5. 獲取連接: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();
定義工具類
1. 定義一個類 JDBCUtils
2. 提供靜態代碼塊加載配置文件,初始化連接池對象
3. 提供方法
1. 獲取連接方法:通過數據庫連接池獲取連接
2. 釋放資源
3. 獲取連接池的方法
1 public class JDBCUtils { 2 3 //1.定義成員變量 DataSource 4 private static DataSource ds ; 5 6 static{ 7 try { 8 //1.加載配置文件 9 Properties pro = new Properties(); 10 pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); 11 //2.獲取DataSource 12 ds = DruidDataSourceFactory.createDataSource(pro); 13 } catch (IOException e) { 14 e.printStackTrace(); 15 } catch (Exception e) { 16 e.printStackTrace(); 17 } 18 } 19 20 /** 21 * 獲取連接 22 */ 23 public static Connection getConnection() throws SQLException { 24 return ds.getConnection(); 25 } 26 27 /** 28 * 釋放資源 29 */ 30 public static void close(Statement stmt,Connection conn){ 31 /* if(stmt != null){ 32 try { 33 stmt.close(); 34 } catch (SQLException e) { 35 e.printStackTrace(); 36 } 37 } 38 39 if(conn != null){ 40 try { 41 conn.close();//歸還連接 42 } catch (SQLException e) { 43 e.printStackTrace(); 44 } 45 }*/ 46 47 close(null,stmt,conn); 48 } 49 50 51 public static void close(ResultSet rs , Statement stmt, Connection conn){ 52 53 54 if(rs != null){ 55 try { 56 rs.close(); 57 } catch (SQLException e) { 58 e.printStackTrace(); 59 } 60 } 61 62 63 if(stmt != null){ 64 try { 65 stmt.close(); 66 } catch (SQLException e) { 67 e.printStackTrace(); 68 } 69 } 70 71 if(conn != null){ 72 try { 73 conn.close();//歸還連接 74 } catch (SQLException e) { 75 e.printStackTrace(); 76 } 77 } 78 } 79 80 /** 81 * 獲取連接池方法 82 */ 83 84 public static DataSource getDataSource(){ 85 return ds; 86 } 87 88 }
Spring JDBC
* Spring框架對JDBC的簡單封裝。提供了一個JDBCTemplate對象簡化JDBC的開發
* 步驟:
1. 導入jar包
2. 創建JdbcTemplate對象。依賴於數據源DataSource
* JdbcTemplate template = new JdbcTemplate(ds);
3. 調用JdbcTemplate的方法來完成CRUD的操作
* update():執行DML語句。增、刪、改語句
* queryForMap():查詢結果將結果集封裝為map集合,將列名作為key,將值作為value 將這條記錄封裝為一個map集合
* 注意:這個方法查詢的結果集長度只能是1
* queryForList():查詢結果將結果集封裝為list集合
* 注意:將每一條記錄封裝為一個Map集合,再將Map集合裝載到List集合中
* query():查詢結果,將結果封裝為JavaBean對象
* query的參數:RowMapper
* 一般我們使用BeanPropertyRowMapper實現類。可以完成數據到JavaBean的自動封裝
* new BeanPropertyRowMapper<類型>(類型.class)
* queryForObject:查詢結果,將結果封裝為對象
* 一般用於聚合函數的查詢
1 public class JDBCTemplateDemo1 { 2 public static void main(String[] args) { 3 //1導入jar包 4 //2創建JDBCTemplate對象 5 JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); 6 //調用方法 7 8 String sql = "update user set username='guojia' where id = ?"; 9 10 int count = template.update(sql, 1); 11 System.out.println(count); 12 } 13 }