JDBC兩種連接池


數據庫連接池
    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 }

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM