C3p0資料庫連線池的使用(轉)

C3p0資料庫連線池的使用(轉)

摘自:https://www.cnblogs.com/biehongli/p/6534694.html

1:首先介紹c3p0的一般使用用法,這種用法練習使用,當然工作的時候使用第二種xml配置完成c3p0的使用。

c3p0的網址:http://www.mchange.com/projects/c3p0/

  1.1:第一種方式使用c3p0:

    使用編碼方式實現c3p0資料庫連線池,練習學習使用的方式

    1.1.1:建立資料庫和資料表,省略。

    1.1.2:引包,如下所示,因為需要連線資料庫,所以必須加上mysql的驅動包
       c3p0-0.9.1.2.jar
       mysql-connector-java-5.1.12-bin.jar

    1.1.3:建立實體類,例如User.java,原始碼如下所示:

複製程式碼

1 package com.bie.po;
2 /** 
3 * @author BieHongLi 
4 * @version 建立時間:2017年3月11日 下午12:55:21 
5 * 
6 */
7 public class User {
8 
9     private int id;
10     private String name;
11     private String password;
12     private String email;
13     private String phone;
14     public int getId() {
15         return id;
16     }
17     public void setId(int id) {
18         this.id = id;
19     }
20     public String getName() {
21         return name;
22     }
23     public void setName(String name) {
24         this.name = name;
25     }
26     public String getPassword() {
27         return password;
28     }
29     public void setPassword(String password) {
30         this.password = password;
31     }
32     public String getEmail() {
33         return email;
34     }
35     public void setEmail(String email) {
36         this.email = email;
37     }
38     public String getPhone() {
39         return phone;
40     }
41     public void setPhone(String phone) {
42         this.phone = phone;
43     }
44     @Override
45     public String toString() {
46         return "User [id="   id   ", name="   name   ", password="   password   ", email="   email   ", phone="   phone
47                   "]";
48     }
49     
50     
51 }

複製程式碼

    1.1.4:建立好實體類之後就可以進行測試c3p0了,這裡使用junit進行測試;原始碼如下所示:

複製程式碼

1 package com.bie.test;
2 
3 import java.beans.PropertyVetoException;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.util.ArrayList;
9 import java.util.List;
10 
11 import org.junit.Test;
12 
13 import com.bie.po.User;
14 import com.mchange.v2.c3p0.ComboPooledDataSource;
15 
16 /** 
17 * @author BieHongLi 
18 * @version 建立時間:2017年3月11日 下午12:40:11 
19 * 
20 */
21 public class C3p0Test {
22 
23     //使用編碼方式實現c3p0資料庫連線池
24     @Test
25     public void TestC3p0() throws PropertyVetoException, SQLException{
26         //第一步:建立連線池核心工具類
27         ComboPooledDataSource dataSource=new ComboPooledDataSource();
28         //第二步:連線池,url,驅動,賬號,密碼,初始連線數,最大連線數
29         dataSource.setJdbcUrl("jdbc:mysql:///test");//設定url
30         dataSource.setDriverClass("com.mysql.jdbc.Driver");//設定驅動
31         dataSource.setUser("root");//mysql的賬號
32         dataSource.setPassword("123456");//mysql的密碼
33         dataSource.setInitialPoolSize(6);//初始連線數,即初始化6個連線
34         dataSource.setMaxPoolSize(50);//最大連線數,即最大的連線數是50
35         dataSource.setMaxIdleTime(60);//最大空閒時間
36         
37         //第三步:從連線池物件中獲取資料庫連線
38         Connection con=dataSource.getConnection();
39         String sql="select * from user ";
40         PreparedStatement ps=con.prepareStatement(sql);
41         ResultSet rs=ps.executeQuery();
42         
43         List<User> list=new ArrayList<User>();
44         while(rs.next()){
45             User user=new User();
46             user.setId(rs.getInt("id"));
47             user.setName(rs.getString("name"));
48             user.setPassword(rs.getString("password"));
49             user.setEmail(rs.getString("email"));
50             user.setPhone(rs.getString("phone"));
51             list.add(user);
52         }
53         
54         System.out.println(list);
55     }
56 
57 }

複製程式碼

  1.2:第二種方式:

    使用配置檔案xml方式完成c3p0資料庫連線池的應用,是工作之後經常使用的方式:

    1.2.1:在src目錄下面建立c3p0-config.xml這個檔名,檔名必須是這個。程式碼如下所示:

複製程式碼

1 <c3p0-config>
2     
3     <!-- c3p0預設配置,下面還可以配置多個資料庫 -->
4     <default-config>
5         <property name="jdbcUrl">jdbc:mysql://localhost:3306/test
6         </property>
7         <property name="driverClass">com.mysql.jdbc.Driver</property>
8         <property name="user">root</property>
9         <property name="password">123456</property>
10         <property name="initialPoolSize">6</property>
11         <property name="maxPoolSize">50</property>
12         <property name="maxIdleTime">1000</property>
13     </default-config>
14 
15 </c3p0-config>

複製程式碼

  

  1.2.2:開始使用junit測試,原始碼如下,自動讀取上面的配置檔案c3p0-config.xml;所以切記這個配置檔案c3p0-config.xml這個名稱必須寫成這個哦~~~

複製程式碼

1 package com.bie.test;
2 
3 import java.beans.PropertyVetoException;
4 import java.sql.Connection;
5 import java.sql.PreparedStatement;
6 import java.sql.ResultSet;
7 import java.sql.SQLException;
8 import java.util.ArrayList;
9 import java.util.List;
10 
11 import org.junit.Test;
12 
13 import com.bie.po.User;
14 import com.mchange.v2.c3p0.ComboPooledDataSource;
15 
16 /** 
17 * @author BieHongLi 
18 * @version 建立時間:2017年3月11日 下午12:40:11 
19 * 
20 */
21 public class C3p0Test2 {
22 
23     //使用編碼方式實現c3p0資料庫連線池
24     @Test
25     public void TestXml() throws PropertyVetoException, SQLException{
26         //第一步:建立連線池核心工具類
27         ComboPooledDataSource dataSource=new ComboPooledDataSource();
28         
29         //第三步:從連線池物件中獲取資料庫連線
30         Connection con=dataSource.getConnection();
31         String sql="select * from user ";
32         PreparedStatement ps=con.prepareStatement(sql);
33         ResultSet rs=ps.executeQuery();
34         
35         List<User> list=new ArrayList<User>();
36         while(rs.next()){
37             User user=new User();
38             user.setId(rs.getInt("id"));
39             user.setName(rs.getString("name"));
40             user.setPassword(rs.getString("password"));
41             user.setEmail(rs.getString("email"));
42             user.setPhone(rs.getString("phone"));
43             list.add(user);
44         }
45         
46         System.out.println("~~~" list);
47     }
48 
49 }

複製程式碼

方式一和方式二都是使用一個資料庫和資料表,演示效果如下所示: