首页 > 代码库 > 数据库连接池--C3P0实现

数据库连接池--C3P0实现

1.C3P0 简介

  C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。

  C3P0的数据库连接池的核心类是ComboPooledDataSource

  使用C3P0需要在工程中导入的jar包

    c3p0-0.9.2-pre5\lib下有三个jar包,如果使用MySQL数据库,只需导入c3p0-0.9.2-pre5.jar,mchange-commons-java-0.2.3两个包即可,另外一个c3p0-oracle-thin-extras-0.9.2-pre5.jar供Oracle数据库使用.

2.代码实现

  方式一,与DBCP代码实现类似,使用ComboPooledDataSource自身的API实现对数据库连接池的属性进行配置.

import java.sql.*;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Utils {	//1 准备一个连接池	private static ComboPooledDataSource dataSource = new ComboPooledDataSource();	static{		//设置参数		try {			//1.1 数据库连接基本4项			dataSource.setDriverClass("com.mysql.jdbc.Driver");			dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day17");			dataSource.setUser("root");			dataSource.setPassword("fujianyi");			//1.2 连接池的特性			// * 初始化个数			dataSource.setInitialPoolSize(10);			// * 最大数			dataSource.setMaxPoolSize(20);			// * 最小数			dataSource.setMinPoolSize(5);			// * 每次增加量			dataSource.setAcquireIncrement(3);			} catch (Exception e) {			throw new RuntimeException(e);		}	}		public static Connection getConnection() throws SQLException{		return dataSource.getConnection();	}}

   方式二,使用C3P0的配置文件c3p0-config.xml,对数据库连接池进行设置,在创建ComboPooledDataSource对象时,将配置文件中<named-config name="XXX">name属性的值作为字符串参数传入,即可完成配置文件的自动加载,配置文件同样需要放在classpath路径下,即src路径.

import java.sql.Connection;import java.sql.SQLException;import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3P0Utils2 {	private static ComboPooledDataSource dataSource;	static{		dataSource = new ComboPooledDataSource("XXX");	}	public static Connection getConnection() throws SQLException{		return dataSource.getConnection();	}}

   关于配置文件

    首先配置文件的名必须为c3p0-config.xml,且必须放在classpath路径下,其格式及内容如下,

<c3p0-config>	<!-- 默认配置,如果没有指定则使用这个配置 -->	<default-config>		<property name="checkoutTimeout">30000</property>		<property name="idleConnectionTestPeriod">30</property>		<property name="initialPoolSize">10</property>		<property name="maxIdleTime">30</property>		<property name="maxPoolSize">100</property>		<property name="minPoolSize">10</property>		<property name="maxStatements">200</property>		<user-overrides user="test-user">			<property name="maxPoolSize">10</property>			<property name="minPoolSize">1</property>			<property name="maxStatements">0</property>		</user-overrides>	</default-config> 	<!-- 命名的配置 -->	<named-config name="XXX">		<property name="driverClass">com.mysql.jdbc.Driver</property>		<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/day17</property>		<property name="user">root</property>		<property name="password">fujianyi</property>    <!-- 如果池中数据连接不够时一次增长多少个 -->		<property name="acquireIncrement">5</property>		<property name="initialPoolSize">20</property>		<property name="minPoolSize">10</property>		<property name="maxPoolSize">40</property>		<property name="maxStatements">0</property>		<property name="maxStatementsPerConnection">5</property>	</named-config></c3p0-config> 

 

 

 

  

数据库连接池--C3P0实现