国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

使用JAVA中的動態代理實現數據庫連接池(2)

2019-11-18 13:43:49
字體:
來源:轉載
供稿:網友

  使用java中的動態代理實現數據庫連接池(2)

ConnectionFactory主要提供了用戶將將連接池綁定到一個具體的名稱上以及取消綁定的操作。使用者只需要關心這兩個類即可使用數據庫連接池的功能。下面我們給出一段如何使用連接池的代碼:


String name = "pool";
String driver = " sun.jdbc.odbc.JdbcOdbcDriver ";
String url = "jdbc:odbc:datasource";
ConnectionParam param = new ConnectionParam(driver,url,null,null);
param.setMinConnection(1);
param.setMaxConnection(5);
param.setTimeoutValue(20000);
ConnectionFactory.bind(name, param);
System.out.//以上代碼是用來登記一個連接池對象,該操作可以在程序初始化只做一次即可
//以下開始就是使用者真正需要寫的代碼
DataSource ds = ConnectionFactory.lookup(name);
try{
for(int i=0;i<10;i++){
Connection conn = ds.getConnection();
try{
testSQL(conn, sql);
}finally{
try{
conn.close();
}catch(Exception e){}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
ConnectionFactory.unbind(name);
System.out.println("unbind datasource ok.");
System.exit(0);
}

從使用者的示例代碼就可以看出,我們已經解決了常規連接池產生的兩個問題。但是我們最最關心的是如何解決接管close方法的辦法。接管工作主要在ConnectionFactory中的兩句代碼:

source = new DataSourceImpl(param);
source.initConnection();

DataSourceImpl是一個實現了接口javax.sql.DataSource的類,該類維護著一個連接池的對象。由于該類是一個受保護的類,因此它暴露給使用者的方法只有接口DataSource中定義的方法,其他的所有方法對使用者來說都是不可視的。我們先來關心用戶可訪問的一個方法getConnection

/**
* @see javax.sql.DataSource#getConnection(String,String)
*/
public Connection getConnection(String user, String pass
Word) throws SQLException
{
//首先從連接池中找出空閑的對象
Connection conn = getFreeConnection(0);
if(conn == null){
//判定是否超過最大連接數,假如超過最大連接數
//則等待一定時間查看是否有空閑連接,否則拋出異常告訴用戶無可用連接
if(getConnectionCount() >= connParam.getMaxConnection())
conn = getFreeConnection(connParam.getWaitTime());
else{//沒有超過連接數,重新獲取一個數據庫的連接
connParam.setUser(user);
connParam.setPassword(password);
Connection conn2 = DriverManager.getConnection(connParam.getUrl(),
user, password);
//代理將要返回的連接對象
_Connection _conn = new _Connection(conn2,true);
synchronized(conns){
conns.add(_conn);
}
conn = _conn.getConnection();
}
}
return conn;
}
/**
* 從連接池中取一個空閑的連接
* @param nTimeout 假如該參數值為0則沒有連接時只是返回一個null
* 否則的話等待nTimeout毫秒看是否還有空閑連接,假如沒有拋出異常


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜都市| 秦安县| 阿拉尔市| 定兴县| 巴南区| 八宿县| 新和县| 葫芦岛市| 莫力| 高淳县| 佛学| 冷水江市| 曲阳县| 高平市| 天柱县| 赤水市| 泰兴市| 南和县| 延庆县| 陇西县| 余江县| 南京市| 武功县| 綦江县| 武汉市| 合作市| 松阳县| 罗定市| 霍林郭勒市| 老河口市| 涞源县| 嘉荫县| 芒康县| 开阳县| 灵璧县| 疏附县| 梨树县| 商南县| 农安县| 永嘉县| 凤山县|