c3p0也是一个开源jdbc连接池,我们熟悉的hibernate和spring框架使用的都是该数据源。
它提供的构造方法有:
通过第三个构造方法读取配置文件,它的配置文件是一个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("属性不匹配的错误");
}
//获取与指定数据的连接
static datasource getsource(){
return
//获得与指定数据库的连接
static connection getconnection()
throws sqlexception {
//从连接池返回一个连接
ds.getconnection();
//释放资源
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){
stmt.close();
stmt=null;
if(conn!=null){
conn.close();
conn = null;
用于测试的主方法:
package cn.toto.demo;
import cn.toto.utils.jdbcutils;
class demo {
void main(string[] args)
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>
name="checkouttimeout">30000</property>
name="idleconnectiontestperiod">30</property>
name="initialpoolsize">10</property>
name="maxidletime">30</property>
name="maxpoolsize">100</property>
name="minpoolsize">10</property>
name="maxstatements">200</property>
<user-overrides
user="test-user">
name="maxpoolsize">10</property>
name="minpoolsize">1</property>
name="maxstatements">0</property>
</user-overrides>
</default-config>
<named-config
name="toto">
name="initialpoolsize">5</property>
name="maxpoolsize">20</property>
name="driverclass">com.mysql.jdbc.driver</property>
name="jdbcurl">jdbc:mysql://localhost:3306/day14</property>
name="user">root</property>
name="password">123456</property>
</named-config>
</c3p0-config>
这时写好的jdbcutils是:
import
javax.sql.datasource;
datasourceds;
//ds = new combopooleddatasource();//默认的缺省的配置
ds =
new combopooleddatasource("toto");//配置文件中设置的内容不用写其他的是因为它可以自动查找classloader下的c3p0-config.xml文件(要注意的是文件的名称必须是c3p0-config.xml)如果文件的名称不是这个,将出现错误。
datasourcegetsource(){