麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

使用JAVA中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池(2)

2019-11-18 13:43:49
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  使用java中的動(dòng)態(tài)代理實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池(2)

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


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.//以上代碼是用來(lái)登記一個(gè)連接池對(duì)象,該操作可以在程序初始化只做一次即可
//以下開(kāi)始就是使用者真正需要寫的代碼
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);
}

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

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

DataSourceImpl是一個(gè)實(shí)現(xiàn)了接口javax.sql.DataSource的類,該類維護(hù)著一個(gè)連接池的對(duì)象。由于該類是一個(gè)受保護(hù)的類,因此它暴露給使用者的方法只有接口DataSource中定義的方法,其他的所有方法對(duì)使用者來(lái)說(shuō)都是不可視的。我們先來(lái)關(guān)心用戶可訪問(wèn)的一個(gè)方法getConnection

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


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久最新免费视频 | 毛片在线播放视频 | 一本一本久久a久久精品综合小说 | 国产精品视频1区 | 一区二区三区四区视频在线观看 | av中文在线观看 | 麻豆视频在线播放 | 露脸各种姿势啪啪的清纯美女 | 一区二区久久精品66国产精品 | 美女网站黄在线观看 | 欧美成人精品一级 | 免费看成人av | 国产精品性夜天天视频 | 久久综合婷婷香五月 | 欧美一级爱爱 | 国产伦久视频免费观看视频 | 特片网久久 | 嗯~啊~弄嗯~啊h高潮视频 | 亚洲欧美日韩一区二区三区在线观看 | 色日本视频| 男男啪羞羞视频网站 | av国语| 久久精品一区二区三区四区五区 | 国产1区2区3区中文字幕 | 视频一区二区在线播放 | 国产精品区一区二区三区 | 亚洲一区在线免费视频 | 99影视电影电视剧在线播放 | 成人在线免费视频观看 | 久久久噜噜噜久久熟有声小说 | 欧美亚洲国产一区二区三区 | 久久国产一 | 成年人视频在线免费观看 | 高清国产免费 | 国产精品视频亚洲 | 午夜视频在线观看免费视频 | 色综合狠狠| 激情亚洲一区二区 | 在线a| 男女羞羞视频在线免费观看 | 国产小视频一区 |