C3PO是一个开放源代码的JDBC数据连接池实现项目,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。开源项目在使用:Hibernate,Spring,MYSQL等。

下载:

https://sourceforge.net/projects/c3p0/files/latest/download?source=files二进制包。

目录:

其中的doc为说明文档,examples是自带的例子,lib是一些jar包,src是源码jar包。

简单使用实例(配置Oracle数据源):

  1. import java.beans.PropertyVetoException;
  2. import java.sql.Connection;
  3. import java.sql.SQLException;
  4. import com.mchange.v2.c3p0.ComboPooledDataSource;
  5. import com.mchange.v2.c3p0.DataSources;
  6. public class Test {
  7. public static void main(String[] args) {
  8. ComboPooledDataSource cpds = new ComboPooledDataSource();
  9. try {
  10. // 数据源进行各种有效的控制:
  11. // 设置驱动
  12. cpds.setDriverClass("oracle.jdbc.driver.OracleDriver");
  13. // 设置数据库URL
  14. cpds.setJdbcUrl("jdbc:oracle:thin:@10.2.4.77:1521:ORCL");
  15. // 设置用户名
  16. cpds.setUser("**********");
  17. // 设置密码
  18. cpds.setPassword("**********");
  19. // 当连接池中的连接用完时,C3PO一次性创建新的连接数目;
  20. cpds.setAcquireIncrement(3);
  21. // 定义在从数据库获取新的连接失败后重复尝试获取的次数,默认为30;
  22. cpds.setAcquireRetryAttempts(30);
  23. // 两次连接中间隔时间默认为1000毫秒
  24. cpds.setAcquireRetryDelay(1000);
  25. // 连接关闭时默认将所有未提交的操作回滚 默认为false;
  26. cpds.setAutoCommitOnClose(false);
  27. // 获取连接失败将会引起所有等待获取连接的线程异常,但是数据源仍有效的保留,并在下次调用getConnection()的时候继续尝试获取连接.如果设为true,那么尝试获取连接失败后该数据源将申明已经断开并永久关闭.默认为false
  28. cpds.setBreakAfterAcquireFailure(false);
  29. // 当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待.单位毫秒,默认为0
  30. cpds.setCheckoutTimeout(0);
  31. // 隔多少秒检查所有连接池中的空闲连接,默认为0表示不检查;
  32. cpds.setIdleConnectionTestPeriod(0);
  33. // 初始化时创建的连接数,应在minPoolSize与maxPoolSize之间取值.默认为3
  34. cpds.setInitialPoolSize(10);
  35. // 最大空闲时间,超过空闲时间的连接将被丢弃.为0或负数据则永不丢弃.默认为0;
  36. cpds.setMaxIdleTime(0);
  37. // 连接池中保留的最大连接数据.默认为15
  38. cpds.setMaxPoolSize(20);
  39. // JDBC的标准参数,用以控制数据源内加载的PreparedStatement数据.但由于预缓存的Statement属于单个Connection而不是整个连接池.所以设置这个参数需要考滤到多方面的因素,如果maxStatements
  40. // 与maxStatementsPerConnection均为0,则缓存被关闭.默认为0;
  41. cpds.setMaxStatements(0);
  42. // 连接池内单个连接所拥有的最大缓存被关闭.默认为0;
  43. cpds.setMaxStatementsPerConnection(0);
  44. // C3P0是异步操作的,缓慢的JDBC操作通过帮助进程完成.扩展这些操作可以有效的提升性能,通过多数程实现多个操作同时被执行.默为为3
  45. cpds.setNumHelperThreads(3);
  46. // 用户修改系统配置参数执行前最多等待的秒数.默认为300;
  47. cpds.setPropertyCycle(300);
  48. // 获取数据连接
  49. Connection conn = cpds.getConnection();
  50. if ( conn != null) {
  51. System.out.println("OK");
  52. // 关闭连接,当前连接被连接池收回
  53. conn.close();
  54. }
  55. } catch (PropertyVetoException e) {
  56. e.printStackTrace();
  57. } catch (SQLException e) {
  58. e.printStackTrace();
  59. } finally {
  60. try {
  61. //关闭数据连接池
  62. DataSources.destroy(cpds);
  63. } catch (SQLException e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. }
  68. }

注意除了导入c3p0-0.9.1.2.jar外还要导放log4j的包和数据库驱动包.

使用实例二:

将lib下的c3p0-0.9.5.2.jar和mchange-commons-java-0.2.11.jar导入eclipse中,并在工程的src下新建一个名为c3p0-config.xml,且内容为:

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

<named-config name="mvcApp">

<propertyname="user">root</property>

<propertyname="password">123456</property>

<propertyname="driverClass">com.mysql.jdbc.Driver</property>

<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/java</property>

<!—以上的user是数据库的用户,password是数据库的密码,driverClass是mysql的数据库驱动,jdbcUrl是连接数据库的url -->

<!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->

<propertyname="acquireIncrement">5</property>

<!--初始化时获取十个连接,取值应在minPoolSize与maxPoolSize之间 -->

<propertyname="initialPoolSize">10</property>

<!--连接池中保留的最小连接数 -->

<propertyname="minPoolSize">10</property>

<!--连接池中保留的最大连接数 -->

<propertyname="maxPoolSize">50</property>

<!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0-->

<propertyname="maxStatements">20</property>

<!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->

<propertyname="maxStatementsPerConnection">5</property>

</named-config>

</c3p0-config>

④在工程中新建一个JdbcUtils的工具类,代码如下:

import java.sql.Connection;

import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class JdbcUtils {

/**

* 释放连接

* @param connection

*/

public staticvoid releaseConnection(Connection connection){

try {

if(connection != null ) {

connection.close();

}

}catch (Exception e) {

e.printStackTrace();

}

}

privatestatic DataSource dataSource = null;

static{

//dataSource资源只能初始化一次

dataSource= new ComboPooledDataSource("mvcApp");

}

/**

* 获取连接

* @return

* @throws SQLException

*/

public staticConnection getConnection() throws SQLException{

returndataSource.getConnection();

}

}

其中的mvcApp是c3p0-config.xml中named-config的name值。DataSource的实例使用ComboPooledDataSource来生成的,这样我们就可以创建一个连接池,从而减少数据库连接时间。

最后,c3p0相似的dbcp和proxool连接池,详见:

dbcp::http://baike.baidu.com/view/920072.htm

proxool:http://baike.baidu.com/view/2098784.htm

通用数据库连接池-C3PO的更多相关文章

  1. paip.提升性能----数据库连接池以及线程池以及对象池

    paip.提升性能----数据库连接池以及线程池以及对象池 目录:数据库连接池c3po,线程池ExecutorService:Jakartacommons-pool对象池 作者Attilax  艾龙, ...

  2. 数据库连接池 C3p0

    数据库连接池 C3po 1 定义 本质上是个容器(集合) 存放数据库的连接容器(connection 对象) ,当系统初始化以后 容器就会创建 容器中就会申请一些连接对象 ,当用户来访问数据库的时候 ...

  3. C3PO数据库连接池

    1 <?xml version="1.0" encoding="UTF-8"?> 2 3 -<c3p0-config> 4 5 6 -& ...

  4. java_JDBC,连接数据库方式,RestSet结果集,Statement,PreparedStatement,事务,批处理,数据库连接池(c3p0和Druid)、Apache-DBUtils、

    一.JDBC的概述 1.JDBC为访问不同的数据薛是供了统一的接口,为使用者屏蔽了细节问题.2. Java程序员使用JDBC,可以连接任何提供了JDBC驱动程序的数据库系统,从而完成对数据库的各种操作 ...

  5. Springboot数据库连接池报错的解决办法

    Springboot数据库连接池报错的解决办法 这个异常通常在Linux服务器上会发生,原因是Linux系统会主动断开一个长时间没有通信的连接 那么我们的问题就是:数据库连接池长时间处于间歇状态,导致 ...

  6. 数据库连接池:Druid

    转自: http://www.cnblogs.com/windlaughing/p/3287501.html Java连接数据库方法概述 java.sql提供了一些接口和类,用于支持数据库增删改查等相 ...

  7. 转!数据库连接池概念、种类、配置(DBCP\C3P0\JndI与Tomact配置连接池)

    数据库连接池概念.种类.配置(DBCP\C3P0\JndI与Tomact配置连接池) 一.DBCP 连接:DBCP 连接池是 Apache 软件基金组织下的一个开源连接池实现. 需要的 java 包c ...

  8. JDBC基础学习(六)—数据库连接池

    一.数据库连接池介绍 1.数据库连接池的缘由      对于一个简单的数据库应用,由于对于数据库的访问不是很频繁.这时可以简单地在需要访问数据库时,就新创建一个连接,用完后就关闭它,这样做也不会带来什 ...

  9. Python实现Mysql数据库连接池

    python连接Mysql数据库: python编程中可以使用MySQLdb进行数据库的连接及诸如查询/插入/更新等操作,但是每次连接mysql数据库请求时,都是独立的去请求访问,相当浪费资源,而且访 ...

随机推荐

  1. System.Windows.Freezable 在未被引用的程序集中定义

    System.Windows.Freezable 在未被引用的程序集中定义 解决方法 添加windowsbase.dll 引用

  2. windows服务器让WEB通过防火墙的问题

    服务器环境:windows server 2012 X64WEB服务器:IIS开放8080,PHPSduty开放80 如果关闭防火墙的情况下,不论是IIS还是安装的其他的WEB服务器,都可以正常访问. ...

  3. .Net 百度经纬度转高德

    1.需求 由于我们项目里面的经纬坐标是百度的,而对接的第三方需要的是高德的经纬坐标,两者之间是有位差区别的,不能直接使用,我们需要通过一个算法将百度经纬度转化为高德经纬度,在百度官网上,有java算法 ...

  4. Java的动态编译、动态加载、字节码操作

    想起来之前做的一个项目:那时候是把需要的源代码通过文件流输出到一个.java文件里,然后调用sun的Comipler接口动态编译成.class文件,然后再用专门写的一个class loader加载这个 ...

  5. netty网络通信中的tcp拆包问题

    工作中的一个项目,我们的一个应用与银行系统进行tcp通信的时候,银行下送的报文有时会分多次返回.在tcp中这种数据包分多次小数据包发送的情况成为拆包问题. 其中一个,也是最常见的思路就是在报文的报文头 ...

  6. POJ 1146

    #include <iostream> #include <algorithm> #define MAXN 55 using namespace std; char _m[MA ...

  7. POJ 1083

    #include<iostream> #include<stdio.h> #include<algorithm> #define MAXN 400 using na ...

  8. CPM(Cluster Percolation method)派系过滤算法

    一.概念 (1)完全子图/全耦合网络/k-派系:所有节点全部两两相连 图1 这些全耦合网络也成为派系,k-派系表示该全耦合网络的节点数目为k 1)k-派系相邻:两个不同的k-派系共享k-1个节点,认为 ...

  9. 微信小程序自定义弹窗wcPop插件|仿微信弹窗样式

    微信小程序自定义组件弹窗wcPop|小程序消息提示框|toast自定义模板弹窗 平时在开发小程序的时候,弹窗应用场景还是蛮广泛的,但是微信官方提供的弹窗比较有局限性,不能自定义修改.这个时候首先想到的 ...

  10. Distributed PostgreSQL on a Google Spanner Architecture – Query Layer

    转自:https://blog.yugabyte.com/distributed-postgresql-on-a-google-spanner-architecture-query-layer/ Ou ...