c3p0数据库连接池如何使用
这期内容当中小编将会给大家带来有关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数据库连接池如何使用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。