您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關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等信息
DataSource ds = DataSources.pooledDataSource(unPooled,c3propertis);//這里面的第二個參數放的是c3p0連接池的配置信息
Connection conn = ds.getConnection();
這三句代碼相信大家很容易看明白,也是使用c3p0連接池的核心代碼,真的很簡單。
下面是我寫的例子,僅供參考
[java] view
plaincopy
package com.bks.db;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.DataSources;
/**
* c3p0連接池管理類
* @author ICE
*
*/
public class C3P0ConnentionProvider {
private static final String JDBC_DRIVER = "driverClass";
private static final String JDBC_URL = "jdbcUrl";
private static DataSource ds;
/**
* 初始化連接池代碼塊
*/
static{
initDBSource();
}
/**
* 初始化c3p0連接池
*/
private static final void initDBSource(){
Properties c3p0Pro = new Properties();
try {
//加載配置文件
c3p0Pro.load(new FileInputStream("./bin/c3p0.properties"));
} catch (Exception e) {
e.printStackTrace();
}
String drverClass = c3p0Pro.getProperty(JDBC_DRIVER);
if(drverClass != null){
try {
//加載驅動類
Class.forName(drverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Properties jdbcpropes = new Properties();
Properties c3propes = new Properties();
for(Object key:c3p0Pro.keySet()){
String skey = (String)key;
if(skey.startsWith("c3p0.")){
c3propes.put(skey, c3p0Pro.getProperty(skey));
}else{
jdbcpropes.put(skey, c3p0Pro.getProperty(skey));
}
}
try {
//建立連接池
DataSource unPooled = DataSources.unpooledDataSource(c3p0Pro.getProperty(JDBC_URL),jdbcpropes);
ds = DataSources.pooledDataSource(unPooled,c3propes);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 獲取數據庫連接對象
* @return 數據連接對象
* @throws SQLException
*/
public static synchronized Connection getConnection() throws SQLException{
final Connection conn = ds.getConnection();
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
return conn;
}
}
下面這個是測試的例子
[java] view
plaincopy
package test.demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.bks.db.C3P0ConnentionProvider;
public class Demo {
public static void main(String[] args) {
for(int i=0;i<30;i++){
new Thread(new Demo2()).start();
}
}
}
class Demo2 implements Runnable{
public void run(){
try {
Connection conn = C3P0ConnentionProvider.getConnection();
PreparedStatement pst = conn.prepareStatement("select to_char(sysdate,'hh34:mm:ss') tim from dual");
ResultSet rs = pst.executeQuery();
rs.next();
System.out.println(Thread.currentThread().getName()+":"+rs.getString(1));
try {
Thread.sleep(10*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
上述就是小編為大家分享的c3p0數據庫連接池如何使用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。