首先我们需要知道为什么要使用连接池:因为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&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包,小伙伴可以自行百度
来源:http://www.cnblogs.com/xwlych/p/5999426.html