标签:
c3p0 也是一个开源 jdbc 连接池,我们熟悉的 Hibernate 和 Spring 框架使用的都是该数据源。
这里获得数据源使用的方法是:ComboPooledDataSource
它提供的构造方法有:
通过第三个构造方法读取配置文件,它的配置文件是一个 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;
public class JdbcUtils {
private static DataSource ds ;
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) {
throw new ExceptionInInitializerError( " 属性不匹配的错误 " );
}
}
// 获取与指定数据的连接
public static DataSource getSource(){
return ds ;
}
// 获得与指定数据库的连接
public static Connection getConnection() throws SQLException {
// 从连接池返回一个连接
return ds .getConnection();
}
// 释放资源
public static void 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;
public class Demo {
public static void main(String[] args) throws SQLException {
Connection conn = JdbcUtils. getConnection ();
System. out . println (conn);
// 结果是: com.mchange.v2.c3p0.impl.NewProxyConnection@10bbf9e
}
}
通过配置文件的方式读取文件。
当通过设置配置文件 xml 时它可以自动查找,不用通过类加载的方式了。只要它的文件路径是在 classloader (类路径也可以说是 classes 下面)的路径下面。(在官方文档中可以找到配置文件)
配置文件好后的文件是:
<? xml version = "1.0" encoding = "UTF-8" ?>
< c3p0-config >
< default-config >
< property name = "automaticTestTable" > con_test </ property >
< 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 = " toto " >
< property name = "initialPoolSize" > 5 </ property >
< property name = "maxPoolSize" > 20 </ property >
< property name = "driverClass" > com.mysql.jdbc.Driver </ property >
< property name = "jdbcUrl" > jdbc:mysql:// localhost :3306/day14 </ property >
< property name = "user" > root </ property >
< property name = "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;
import javax.sql.DataSource ;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JdbcUtils {
private static DataSource ds ;
static {
//ds = new ComboPooledDataSource();// 默认的缺省的配置
ds = new ComboPooledDataSource( " toto " ); // 配置文件中设置的内容不用写其他的是因为它可以自动查找 classloader 下的 c3p0-config.xml 文件(要注意的是文件的名称必须是 c3p0-config.xml )如果文件的名称不是这个,将出现错误。
}
// 获取与指定数据的连接
public static DataSource getSource(){
return ds ;
}
// 获得与指定数据库的连接
public static Connection getConnection() throws SQLException {
// 从连接池返回一个连接
return ds .getConnection();
}
// 释放资源
public static void 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工具类的编写
标签:
原文地址:http://www.cnblogs.com/xiaona19841010/p/5183926.html