这期内容当中小编将会给大家带来有关c3p0数据库连接池如何使用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、jar包

引用开源项目,自然要先下载人家的jar包,我这里有一个在云盘:c3p0-0.9.5-pre4.jar,这里面其实有三个包,是我在开源中国下载的最新的,如果你还想要更新的不妨自己到网上去搜一下。

二、配置文件

作为一个数据库连接池自然有很多参数要设置,当然就算你不设置也有默认的,不过那不一定能满足你的要求。这里的配置文件没有什么特别的要求,可以是xml也可以是properties甚至与txt都行,当然如果你愿意也可以写死在程序中。

下面是我的配置文件,我把它放在了src目录下,名字叫“c3p0.properties”

[java]view
plaincopy

#jdbc基本信息

driverClass=oracle.jdbc.driver.OracleDriver

jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521/orcl

user=bctts

password=bctts123


#c3p0连接池信息

c3p0.minPoolSize=3

c3p0.maxPoolSize=25


#当连接池中的连接耗尽的时候c3p0一次同时获取的连接数

c3p0.acquireIncrement=3

#定义在从数据库获取新连接失败后重复尝试的次数

c3p0.acquireRetryAttempts=60

#两次连接中间隔时间,单位毫秒

c3p0.acquireRetryDelay=1000

#连接关闭时默认将所有未提交的操作回滚

c3p0.autoCommitOnClose=false

#当连接池用完时客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒

c3p0.checkoutTimeout=3000

#每120秒检查所有连接池中的空闲连接。Default:0

c3p0.idleConnectionTestPeriod=120

#最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default:0

c3p0.maxIdleTime=600

#如果设为true那么在取得连接的同时将校验连接的有效性。Default:false

c3p0.testConnectionOnCheckin=true

#c3p0将建一张名为c3p0TestTable的空表,并使用其自带的查询语句进行测试。

jdbc.automaticTestTable=c3p0TestTable


配置文件中的内容我就不解释了,相信你看一眼就能很明白。

三、代码实现

c3p0的使用非常简单,基本上就是三步搞定。

DataSource unPooled = DataSources.unpooledDataSource(url,jdbcproperties);//这里的第二个参数放的是连接数据库的信息,包括user、password等信息

DataSourceds = DataSources.pooledDataSource(unPooled,c3propertis);//这里面的第二个参数放的是c3p0连接池的配置信息

Connection conn = ds.getConnection();

这三句代码相信大家很容易看明白,也是使用c3p0连接池的核心代码,真的很简单。

下面是我写的例子,仅供参考

[java]view
plaincopy

packagecom.bks.db;


importjava.io.FileInputStream;

importjava.sql.Connection;

importjava.sql.SQLException;

importjava.util.Properties;


importjavax.sql.DataSource;


importcom.mchange.v2.c3p0.DataSources;


/**

*c3p0连接池管理类

*@authorICE

*

*/

publicclassC3P0ConnentionProvider{


privatestaticfinalStringJDBC_DRIVER="driverClass";

privatestaticfinalStringJDBC_URL="jdbcUrl";


privatestaticDataSourceds;

/**

*初始化连接池代码块

*/

static{

initDBSource();

}


/**

*初始化c3p0连接池

*/

privatestaticfinalvoidinitDBSource(){

Propertiesc3p0Pro=newProperties();

try{

//加载配置文件

c3p0Pro.load(newFileInputStream("./bin/c3p0.properties"));

}catch(Exceptione){

e.printStackTrace();

}


StringdrverClass=c3p0Pro.getProperty(JDBC_DRIVER);

if(drverClass!=null){

try{

//加载驱动类

Class.forName(drverClass);

}catch(ClassNotFoundExceptione){

e.printStackTrace();

}


}


Propertiesjdbcpropes=newProperties();

Propertiesc3propes=newProperties();

for(Objectkey:c3p0Pro.keySet()){

Stringskey=(String)key;

if(skey.startsWith("c3p0.")){

c3propes.put(skey,c3p0Pro.getProperty(skey));

}else{

jdbcpropes.put(skey,c3p0Pro.getProperty(skey));

}

}


try{

//建立连接池

DataSourceunPooled=DataSources.unpooledDataSource(c3p0Pro.getProperty(JDBC_URL),jdbcpropes);

ds=DataSources.pooledDataSource(unPooled,c3propes);


}catch(SQLExceptione){

e.printStackTrace();

}

}


/**

*获取数据库连接对象

*@return数据连接对象

*@throwsSQLException

*/

publicstaticsynchronizedConnectiongetConnection()throwsSQLException{

finalConnectionconn=ds.getConnection();

conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

returnconn;

}

}


下面这个是测试的例子

[java]view
plaincopy

packagetest.demo;


importjava.sql.Connection;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.sql.SQLException;


importcom.bks.db.C3P0ConnentionProvider;


publicclassDemo{


publicstaticvoidmain(String[]args){

for(inti=0;i<30;i++){

newThread(newDemo2()).start();

}

}


}


classDemo2implementsRunnable{


publicvoidrun(){

try{

Connectionconn=C3P0ConnentionProvider.getConnection();

PreparedStatementpst=conn.prepareStatement("selectto_char(sysdate,'hh34:mm:ss')timfromdual");

ResultSetrs=pst.executeQuery();

rs.next();

System.out.println(Thread.currentThread().getName()+":"+rs.getString(1));

try{

Thread.sleep(10*1000);

}catch(InterruptedExceptione){

e.printStackTrace();

}


}catch(SQLExceptione){

e.printStackTrace();

}

}

}

上述就是小编为大家分享的c3p0数据库连接池如何使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。