使用c3p0连接池

首先我们需要知道为什么要使用连接池:因为jdbc没有保持连接的能力,一旦超过一定时间没有使用(大约几百毫秒),连接就会被自动释放掉,每次新建连接都需要140毫秒左右的时间而C3P0连接池会池化连接,随时取用,平均每次取用只需要10-20毫秒,所以如果是很多客户端并发随机访问数据库的话,使用连接池的效率会高。
接下来我们看使用c3p0需要做那些准备:首先需要导入相对应的jar包:c3p0-0.9.1.2-jdk1.3.jar,然后就是链接数据库的配置文件:c3p0-config.xml,配置如下

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <c3p0-config>  
 3     <!-- This is default config! -->  
 4     <default-config>  
 5         <property name="initialPoolSize">10</property>  
 6         <property name="maxIdleTime">30</property>  
 7         <property name="maxPoolSize">100</property>  
 8         <property name="minPoolSize">10</property>  
 9         <property name="maxStatements">200</property>  
10     </default-config>  
11   
12     <!-- This is my config for mysql-->  
13     <named-config name="mysql">  
14           <!--   加载驱动 -->
15         <property name="driverClass">com.mysql.jdbc.Driver</property> 
16        <!--  其中studio为数据库名称  -->
17         <property name="jdbcUrl">jdbc:mysql://localhost:3306/studio?useUnicode=true&amp;characterEncoding=UTF8</property>  
18       <!--  连接用户名 -->
19         <property name="user">root</property> 
20        <!--  连接密码  -->
21         <property name="password"></property>  
22         <property name="initialPoolSize">10</property>  
23         <property name="maxIdleTime">30</property>  
24         <property name="maxPoolSize">100</property>  
25         <property name="minPoolSize">10</property>  
26         <property name="maxStatements">200</property>  
27     </named-config>  
28 </c3p0-config> 

接下来是c3p0链接数据库的工具类,调用此类之后我们就无需再手动关闭连接,代码如下

 1 import java.sql.Connection;  
 2 import java.sql.PreparedStatement;  
 3 import java.sql.ResultSet;  
 4 import java.sql.SQLException;    
 5   
 6 import com.mchange.v2.c3p0.ComboPooledDataSource;  
 7 public class C3P0Util {  
 8     static ComboPooledDataSource cpds=null;  
 9     static{   
10         cpds = new ComboPooledDataSource("mysql");//这是mysql数据库  
11     }  
12     /** 
13      * 获得数据库连接  
14      */  
15     public static Connection getConnection(){  
16         try {  
17             return cpds.getConnection();  
18         } catch (SQLException e) {  
19             e.printStackTrace();  
20             return null;  
21         }  
22     }  
23       
24     /** 
25      * 数据库关闭操作 
26      */  
27     public static void close(Connection conn,PreparedStatement pst,ResultSet rs){  
28         if(rs!=null){  
29             try {  
30                 rs.close();  
31             } catch (SQLException e) {  
32                 e.printStackTrace();  
33             }  
34         }  
35         if(pst!=null){  
36             try {  
37                 pst.close();  
38             } catch (SQLException e) {  
39                 e.printStackTrace();  
40             }  
41         }  
42   
43         if(conn!=null){  
44             try {  
45                 conn.close();  
46             } catch (SQLException e) {  
47                 e.printStackTrace();  
48             }  
49         }  
50     }  
51 } 

最后我们只需要在自己写的Dao层操作中获取到C3p0的连接就好了,这里我就只写一个查询的方法

public List<String> getSelect() {
// sql语句
String sql = "select * from user";
// 获取到连接
Connection conn = C3P0Util.getConnection();
PreparedStatement pst = null;
// 定义一个list用于接受数据库查询到的内容
List<String> list = new ArrayList<String>();
try {
pst = (PreparedStatement) conn.prepareStatement(sql);
ResultSet rs = pst.executeQuery();
while (rs.next()) {
// 将查询出的内容添加到list中,其中userName为数据库中的字段名称
list.add(rs.getString("userName"));
}
} catch (Exception e) {
}
return list;
}

 

主要是第5行中获取链接的方式改变了,当然我们既然链接数据库就需要导入相对应的jar包,小伙伴可以自行百度

posted @ 2016-10-26 10:39  DreamXY  阅读(2033)  评论(0编辑  收藏  举报