1. 程式人生 > 其它 >JavaWeb6.1【資料庫連線池、C3P0資料庫連線池技術】

JavaWeb6.1【資料庫連線池、C3P0資料庫連線池技術】

 1 package com.haifei.datasource.c3p0;
 2 
 3 import com.mchange.v2.c3p0.ComboPooledDataSource;
 4 
 5 import javax.sql.DataSource;
 6 import java.sql.Connection;
 7 import java.sql.SQLException;
 8 
 9 /*
10 資料庫連線池
11 
12     1. 概念:其實就是一個容器(集合),存放資料庫連線的容器。
13             當系統初始化好後,容器被建立,容器中會申請一些連線物件,當用戶來訪問資料庫時,從容器中獲取連線物件,使用者訪問完之後,會將連線物件歸還給容器。
14 15 2. 好處: 16 1. 節約資源 17 2. 使用者訪問高效 18 19 3. 實現: 20 1. 標準介面:DataSource javax.sql包下的 21 1. 方法: 22 * 獲取連線:getConnection() 23 * 歸還連線:Connection.close()。如果連線物件Connection是從連線池中獲取的,那麼呼叫Connection.close()方法,則不會再關閉連線了。而是歸還連線 24
25 2. 一般我們不去實現它,有資料庫廠商來實現 26 1. C3P0:資料庫連線池技術 27 2. Druid:資料庫連線池實現技術,由阿里巴巴提供的 28 29 4. C3P0:資料庫連線池技術 30 1. 匯入jar包 (兩個) c3p0-0.9.5.2.jar 和 mchange-commons-java-0.2.12.jar , 31 * 不要忘記匯入資料庫驅動jar包mysql-connector-java-5.1.37-bin.jar 32 * 即一共所需3個jar包
33 2. 定義配置檔案: 34 * 名稱: c3p0.properties 或者 c3p0-config.xml 35 * 路徑:直接將檔案放在src目錄下即可。 36 37 3. 建立核心物件 資料庫連線池物件 ComboPooledDataSource 38 4. 獲取連線: getConnection 39 */ 40 public class C3P0Demo1 { 41 public static void main(String[] args) throws SQLException { 42 //1 建立資料庫連線池物件 43 DataSource ds = new ComboPooledDataSource(); 44 45 //2 獲取連線物件 46 Connection conn = ds.getConnection(); 47 System.out.println(conn); //com.mchange.v2.c3p0.impl.NewProxyConnection@550ee7e5 [wrapping: com.mysql.jdbc.JDBC4Connection@5f9b2141] 48 49 50 } 51 }
 1 package com.haifei.datasource.c3p0;
 2 
 3 import com.mchange.v2.c3p0.ComboPooledDataSource;
 4 
 5 import javax.sql.DataSource;
 6 import java.sql.Connection;
 7 import java.sql.SQLException;
 8 
 9 public class C3P0Demo2 {
10     public static void main(String[] args) throws SQLException {
11 //        testDefaultConfig();
12         testNamedConfig();
13     }
14 
15 
16     public static void testDefaultConfig() throws SQLException{
17         //獲取資料庫連線池物件,使用預設配置<default-config>
18         DataSource ds = new ComboPooledDataSource();
19 
20 //        for (int i=1; i<=10; i++){
21         for (int i=1; i<=11; i++){
22             Connection conn = ds.getConnection();
23             System.out.println(i + ":" + conn);
24 
25             /*if(i == 5){
26                 conn.close(); //#11號之前#5提前主動歸還連線物件
27             }*/
28         }
29 
30         /*
31         1:com.mchange.v2.c3p0.impl.NewProxyConnection@3514a4c0 [wrapping: com.mysql.jdbc.JDBC4Connection@212b5695]
32         2:com.mchange.v2.c3p0.impl.NewProxyConnection@69997e9d [wrapping: com.mysql.jdbc.JDBC4Connection@793be5ca]
33         3:com.mchange.v2.c3p0.impl.NewProxyConnection@37654521 [wrapping: com.mysql.jdbc.JDBC4Connection@15aab8c6]
34         4:com.mchange.v2.c3p0.impl.NewProxyConnection@4de4b452 [wrapping: com.mysql.jdbc.JDBC4Connection@50b5ac82]
35         5:com.mchange.v2.c3p0.impl.NewProxyConnection@6babf3bf [wrapping: com.mysql.jdbc.JDBC4Connection@3059cbc]
36         6:com.mchange.v2.c3p0.impl.NewProxyConnection@24fcf36f [wrapping: com.mysql.jdbc.JDBC4Connection@10feca44]
37         7:com.mchange.v2.c3p0.impl.NewProxyConnection@ea6147e [wrapping: com.mysql.jdbc.JDBC4Connection@4d02f94e]
38         8:com.mchange.v2.c3p0.impl.NewProxyConnection@1e683a3e [wrapping: com.mysql.jdbc.JDBC4Connection@2053d869]
39         9:com.mchange.v2.c3p0.impl.NewProxyConnection@14555e0a [wrapping: com.mysql.jdbc.JDBC4Connection@4bb33f74]
40         10:com.mchange.v2.c3p0.impl.NewProxyConnection@3c73951 [wrapping: com.mysql.jdbc.JDBC4Connection@3d5c822d]
41 
42         //Exception in thread "main" java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
43          */
44     }
45 
46 
47     public static void testNamedConfig() throws SQLException{
48         //獲取資料庫連線池物件,使用指定配置<named-config name="otherc3p0">
49         DataSource ds = new ComboPooledDataSource("otherc3p0");
50 
51         for (int i=1; i<=10; i++){
52             Connection conn = ds.getConnection();
53             System.out.println(i + ":" + conn);
54         }
55 
56         /*
57         1:com.mchange.v2.c3p0.impl.NewProxyConnection@6bedbc4d [wrapping: com.mysql.jdbc.JDBC4Connection@932bc4a]
58         2:com.mchange.v2.c3p0.impl.NewProxyConnection@2fd1433e [wrapping: com.mysql.jdbc.JDBC4Connection@29d89d5d]
59         3:com.mchange.v2.c3p0.impl.NewProxyConnection@212b5695 [wrapping: com.mysql.jdbc.JDBC4Connection@446293d]
60         4:com.mchange.v2.c3p0.impl.NewProxyConnection@793be5ca [wrapping: com.mysql.jdbc.JDBC4Connection@2df9b86]
61         5:com.mchange.v2.c3p0.impl.NewProxyConnection@15aab8c6 [wrapping: com.mysql.jdbc.JDBC4Connection@33990a0c]
62         6:com.mchange.v2.c3p0.impl.NewProxyConnection@50b5ac82 [wrapping: com.mysql.jdbc.JDBC4Connection@101952da]
63         7:com.mchange.v2.c3p0.impl.NewProxyConnection@3059cbc [wrapping: com.mysql.jdbc.JDBC4Connection@7ea9e1e2]
64         8:com.mchange.v2.c3p0.impl.NewProxyConnection@10feca44 [wrapping: com.mysql.jdbc.JDBC4Connection@3fb1549b]
65 
66         Exception in thread "main" java.sql.SQLException: An attempt by a client to checkout a Connection has timed out.
67          */
68     }
69 
70 
71 }
<c3p0-config>
  <!-- 使用預設的配置讀取連線池物件 -->
  <default-config>
  	<!--  連線引數 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/hm_db2</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 連線池引數 -->
    <property name="initialPoolSize">5</property><!-- 初始化申請的連線數量 -->
    <property name="maxPoolSize">10</property><!-- 最大的連線數量 -->
    <property name="checkoutTimeout">3000</property><!-- 超時時間 -->
  </default-config>

  <named-config name="otherc3p0"> 
    <!--  連線引數 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/hm_db2</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <!-- 連線池引數 -->
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">8</property>
    <property name="checkoutTimeout">1000</property>
  </named-config>
</c3p0-config>