C3P0 数据库连接池介绍
C3P0 是一个开源的 JDBC 数据库连接池库,它提供了高度灵活和高性能的连接池实现。C3P0 可以与各种关系型数据库一起使用,包括 MySQL、Oracle、SQL Server 等。它的名称 “C3P0” 实际上代表 “Connect3 Pool”,意味着它可以管理多个数据库连接。
C3P0 的主要特点包括:
- 支持连接池的连接重用和管理。
- 可以配置连接池的各项参数,以满足不同性能需求。
- 具备连接超时、闲置连接的回收、异常处理等功能。
- 提供了 JMX 支持,可以通过 JMX 监控和管理连接池。
- 支持 JDBC3 和 JDBC4。
C3P0 jar包下载
一、C3P0 官网下载路径如下:
c3p0:JDBC DataSources/Resource Pools download | SourceForge.net
进入官网之后下载如下压缩包:
二、解压下载好的压缩包
需要的 jar 包在解压文件里的 lib 目录下。
c3p0-0.9.5.5.jar
c3p0-oracle-thin-extras-0.9.5.5.jar
mchange-commons-java-0.2.19.jar
三、将解压好的c3p0 jar包导入到idea项目里面去
根据个人需要将 c3p0-0.9.5.5.jar
和 mchange-commons-java-0.2.19.jar
jar包文件复制到项目的 lib 路径下。
将lib文件夹 “添加为库” 或 将添加的jar包 “添加为库”(必要操作)
C3P0 配置及使用(这里以mysql数据库演示)
一、C3P0 配置及使用(使用配置文件初始化连接池配置 )
1、新建 c3p0-config.xml
我用的是配置 c3p0-config.xml 文件的方式,文件名固定。在项目的 src 目录下新建就行。:
<c3p0-config>
<!--使用默认的配置读取数据库连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/你自己的数据库名称?useServerPrepStmts=true</property>
<property name="user">用户名</property>
<property name="password">密码</property>
<!-- 连接池参数 -->
<!--初始化申请的连接数量-->
<property name="initialPoolSize">5</property>
<!--最大的连接数量-->
<property name="maxPoolSize">10</property>
<!--超时时间-->
<property name="checkoutTimeout">3000</property>
</default-config>
</c3p0-config>
2、连接MySql数据库操作
首先,我们需要创建一个 C3P0 连接池的配置对象。(配置文件是使用C3P0的默认配置文件的方法,创建的连接对象会自动识别配置文件的内容)
public static void main(String[] args) throws SQLException {
//创建ComboPooledDataSource数据源
ComboPooledDataSource dataSource = new ComboPooledDataSource();
//从数据源获取连接
Connection conn = dataSource.getConnection();
//预处理sql语句及执行查询操作
ResultSet rs = conn.prepareStatement("select count(*) from 20231124db.depttab;").executeQuery();
//处理sql查询的数据结果
if (rs.next()) {
System.out.println(rs.getInt(1));
}
//释放连接到连接池
rs.close();
conn.close();
dataSource.close();
}
运行结果:
二、C3P0 配置及使用(使用C3P0自带的方法初始化连接池配置)
1、连接MySql数据库操作
首先,我们需要创建一个 C3P0 连接池的配置对象。C3P0 提供了 ComboPooledDataSource
类来实现这一功能。以下是一个简单的配置示例:
public static void main(String[] args) throws SQLException, PropertyVetoException {
//c3p0的数据源
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//连接池的数据库连接参数
comboPooledDataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/20231124db");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("sasa");
//连接池参数设置
comboPooledDataSource.setInitialPoolSize(5);
comboPooledDataSource.setMaxPoolSize(20);
comboPooledDataSource.setCheckoutTimeout(3000);
//获取连接
Connection conn = comboPooledDataSource.getConnection();
//预处理sql语句及执行查询操作
ResultSet rs = conn.prepareStatement("select count(*) from 20231124db.depttab;").executeQuery();
//处理sql查询的数据结果
if (rs.next()) {
System.out.println(rs.getInt(1));
}
//释放数据
rs.close();
comboPooledDataSource.close();
conn.close();
}
运行结果:
配置参数详解
C3P0 提供了许多配置参数,可以根据应用程序的需求进行调整。以下是一些常用的配置参数和其作用的简要说明:
jdbcUrl
:数据库连接 URL。user
:数据库用户名。password
:数据库密码。initialPoolSize
:初始连接池大小。minPoolSize
:连接池中保持的最小连接数。maxPoolSize
:连接池中允许的最大连接数。maxIdleTime
:连接的最大空闲时间(以秒为单位)。acquireIncrement
:每次获取连接时增加的连接数。idleConnectionTestPeriod
:空闲连接测试的周期(以秒为单位)。preferredTestQuery
:用于测试连接的 SQL 查询语句。testConnectionOnCheckin
:在连接返回连接池时是否测试连接。testConnectionOnCheckout
:在从连接池获取连接时是否测试连接。
这些参数可以在 ComboPooledDataSource
对象中进行设置,以满足不同场景下的需求。
总结
C3P0 是一个功能强大的数据库连接池库,它可以提高数据库访问的性能和效率,减少连接的创建和销毁开销。通过合理配置和使用 C3P0 数据库连接池,可以使您的应用程序更加稳定和可靠。