JDBC连接池(数据源)

Posted 大圣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDBC连接池(数据源)相关的知识,希望对你有一定的参考价值。

自定义连接池:用装饰设计模式将原连接的close方法改造成将连接还回数据源;装饰设计模式:http://www.cnblogs.com/tongxuping/p/6832518.html

 

开源数据库连接池:

  C3P0连接池:

    基本步骤:

    1.导入开发包
           2.创建数据库连接池
          ComboPooledDataSource cpds = new ComboPooledDataSource();
           3.配置基本的连接信息
               a) 通过setters方法来设置参数
               b) 通过c3p0-config.xml文件来配置基本连接信息
               c) 通过c3p0.properties文件来配置基本连接信息

示例代码:

 1 package Pool;
 2 
 3 
 4 import java.sql.Connection;
 5 import java.sql.PreparedStatement;
 6 
 7 import JDBCutils.JDBCutils;
 8 
 9 import com.mchange.v2.c3p0.ComboPooledDataSource;
10 
11 /*
12  * c3p0 是个开源是数据源
13  * c3p0被称为数据库链接池,用来管理数据库链接的获取和存储。
14  * 有两种写法:
15  *     方式一:在创建对象后直接设置JDBC的基本信息,如:数据库驱动,数据库url,登陆数据库用户名和密码;然后再对数据库操作
16  *     方式二:外建一个xml或者properties配置文件,存在配置文件时无需对数据库基本信息进行设置。直接获取数据库连接,对数据库相应的操作
17  */
18 public class C3P0 {
19     public static void main(String[] args) {
20         
21         Connection conn = null;
22         PreparedStatement ps=null;
23         //通过ComboPooledDataSource获取dateSource即数据源,可从中获取数据库的链接。
24         ComboPooledDataSource pool = new ComboPooledDataSource();
25         //ComboPooledDataSource pool = new ComboPooledDataSource("config1");
26         /*
27          * 传参表示需要使用config1的配置信息为数据库操作信息
28          */
29         try {
30             /*pool.setDriverClass("com.mysql.jdbc.Driver");
31             pool.setJdbcUrl("jdbc:mysql:///mydb5");
32             pool.setUser("root");
33             pool.setPassword("admin");*/
34             
35             conn = pool.getConnection();
36             String sql="delete from tb_batch where id>?";
37             ps = conn.prepareStatement(sql);
38             ps.setInt(1, 20);
39             int rows = ps.executeUpdate();
40             System.out.println(rows);
41             
42             
43             
44         } catch (Exception e) {
45             e.printStackTrace();
46         }finally{
47             JDBCutils.closeResou(conn, ps, null);
48         }
49     }
50 }

XML配置:XML文件名必须为:c3p0-config.xml,否则都不到配置信息;name不能随意写。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <c3p0-config>
 3     <default-config>
 4         <!-- setting -->
 5         <!-- c3p0默认读取这块 -->
 6         <property name="driverClass">com.mysql.jdbc.Driver</property>
 7         <property name="jdbcUrl">jdbc:mysql:///mydb5</property>
 8         <property name="user">root</property>
 9         <property name="password">admin</property>
10     </default-config>
11 
12 
13     <named-config name="config1"> 
14         <!--  -->
15         <property name="driverClass">com.mysql.jdbc.Driver</property>
16         <property name="jdbcUrl">jdbc:mysql:///mydb1</property>
17         <property name="user">admin</property>
18         <property name="password">123</property>
19     </named-config>
20 </c3p0-config>

Properties配置:

1 c3p0.driverClass=com.mysql.jdbc.Driver
2 c3p0.jdbcUrl=jdbc:mysql:///mydb1
3 c3p0.user=root
4 c3p0.password=root

 

以上是关于JDBC连接池(数据源)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA基础:JDBC的使用 附详细代码

用Java手动封装JDBC连接池

MySql & JDBC & 连接池 & 总结

哪个更好:JDBC 连接池,还是使用 SIngleton 类进行 JDBC 连接?

java代码实现数据源切换(连接池简单粗暴)

JDBC 连接池错误