首页 > 代码库 > 02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写
02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写
c3p0也是一个开源jdbc连接池,我们熟悉的Hibernate和Spring框架使用的都是该数据源。
这里获得数据源使用的方法是:ComboPooledDataSource
它提供的构造方法有:
ComboPooledDataSource() |
ComboPooledDataSource(boolean autoregister) |
ComboPooledDataSource(java.lang.String configName) |
通过第三个构造方法读取配置文件,它的配置文件是一个xml文件,也可以是一个properties文件。
在c3po中的ComboPooledDataSource类提供了如下方法:
setDriverClass:设置驱动使用的是
setJdbcUrl:设置url
setInitialPoolSize(int initialPoolSize)
setPassword:设置密码
setUser:设置用户名
不适用配置文件的使用方法:
package cn.toto.utils;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
publicclass JdbcUtils {
privatestatic DataSourceds;
static {
try {
//初始化c3p0连接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass("com.mysql.jdbc.Driver");
cpds.setJdbcUrl("jdbc:mysql://localhost:3306/day14");
cpds.setUser("root");
cpds.setPassword("123456");
cpds.setInitialPoolSize(5);
cpds.setMaxPoolSize(20);
ds =cpds;
} catch (PropertyVetoException e) {
thrownew ExceptionInInitializerError("属性不匹配的错误");
}
}
//获取与指定数据的连接
publicstatic DataSource getSource(){
returnds;
}
//获得与指定数据库的连接
publicstatic Connection getConnection()throws SQLException {
//从连接池返回一个连接
returnds.getConnection();
}
//释放资源
publicstaticvoid release(ResultSet rs,Statement stmt,Connection conn) {
if(rs!=null){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
rs = null;
}
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
stmt=null;
}
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
conn = null;
}
}
}
用于测试的主方法:
package cn.toto.demo;
import java.sql.Connection;
import java.sql.SQLException;
import cn.toto.utils.JdbcUtils;
publicclass Demo {
publicstaticvoid main(String[] args)throws SQLException {
Connection conn = JdbcUtils.getConnection();
System.out.println(conn);
//结果是:com.mchange.v2.c3p0.impl.NewProxyConnection@10bbf9e
}
}
通过配置文件的方式读取文件。
当通过设置配置文件xml时它可以自动查找,不用通过类加载的方式了。只要它的文件路径是在classloader(类路径也可以说是classes下面)的路径下面。(在官方文档中可以找到配置文件)
配置文件好后的文件是:
<?xmlversion="1.0"encoding="UTF-8"?>
<c3p0-config>
<default-config>
<propertyname="automaticTestTable">con_test</property>
<propertyname="checkoutTimeout">30000</property>
<propertyname="idleConnectionTestPeriod">30</property>
<propertyname="initialPoolSize">10</property>
<propertyname="maxIdleTime">30</property>
<propertyname="maxPoolSize">100</property>
<propertyname="minPoolSize">10</property>
<propertyname="maxStatements">200</property>
<user-overridesuser="test-user">
<propertyname="maxPoolSize">10</property>
<propertyname="minPoolSize">1</property>
<propertyname="maxStatements">0</property>
</user-overrides>
</default-config>
<named-configname="toto">
<propertyname="initialPoolSize">5</property>
<propertyname="maxPoolSize">20</property>
<propertyname="driverClass">com.mysql.jdbc.Driver</property>
<propertyname="jdbcUrl">jdbc:mysql://localhost:3306/day14</property>
<propertyname="user">root</property>
<propertyname="password">123456</property>
</named-config>
</c3p0-config>
这时写好的JdbcUtils是:
package cn.toto.utils;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
importjavax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
publicclass JdbcUtils {
privatestaticDataSourceds;
static {
//ds = new ComboPooledDataSource();//默认的缺省的配置
ds =new ComboPooledDataSource("toto");//配置文件中设置的内容不用写其他的是因为它可以自动查找classloader下的c3p0-config.xml文件(要注意的是文件的名称必须是c3p0-config.xml)如果文件的名称不是这个,将出现错误。
}
//获取与指定数据的连接
publicstaticDataSourcegetSource(){
returnds;
}
//获得与指定数据库的连接
publicstatic Connection getConnection()throws SQLException {
//从连接池返回一个连接
returnds.getConnection();
}
//释放资源
publicstaticvoid release(ResultSet rs,Statement stmt,Connection conn) {
if(rs!=null){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
rs = null;
}
if(stmt!=null){
try{
stmt.close();
}catch(SQLException e){
e.printStackTrace();
}
stmt=null;
}
if(conn!=null){
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
}
conn = null;
}
}
}
02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写