六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

一種完成數據庫連接池的方法(1)

[摘要]數據庫連接池在編寫應用服務是經常需要用到的模塊,太過頻繁的連接數據庫對服務性能來講是一個瓶頸,使用緩沖池技術可以來消除這個瓶頸。我們可以在互聯網上找到很多關于數據庫連接池的源程序,但是都發現這樣一個...
數據庫連接池在編寫應用服務是經常需要用到的模塊,太過頻繁的連接數據庫對服務性能來講是一個瓶頸,使用緩沖池技術可以來消除這個瓶頸。我們可以在互聯網上找到很多關于數據庫連接池的源程序,但是都發現這樣一個共同的問題:這些連接池的實現方法都不同程度地增加了與使用者之間的耦合度。很多的連接池都要求用戶通過其規定的方法獲取數據庫的連接,這一點我們可以理解,畢竟目前所有的應用服務器取數據庫連接的方式都是這種方式實現的。但是另外一個共同的問題是,它們同時不允許使用者顯式的調用Connection.close()方法,而需要用其規定的一個方法來關閉連接。這種做法有兩個缺點:

第一:改變了用戶使用習慣,增加了用戶的使用難度。

首先我們來看看一個正常的數據庫操作過程:


int executeSQL(String sql) throws SQLException
{
Connection conn = getConnection();//通過某種方式獲取數據庫連接
PreparedStatement ps = null;
int res = 0;
try{
ps = conn.prepareStatement(sql);
res = ps.executeUpdate();
}finally{
try{
ps.close();
}catch(Exception e){}
try{
conn.close();//
}catch(Exception e){}
}
return res;
}




使用者在用完數據庫連接后通常是直接調用連接的方法close來釋放數據庫資源,如果用我們前面提到的連接池的實現方法,那語句conn.close()將被某些特定的語句所替代。

第二:使連接池無法對之中的所有連接進行獨占控制。由于連接池不允許用戶直接調用連接的close方法,一旦使用者在使用的過程中由于習慣問題直接關閉了數據庫連接,那么連接池將無法正常維護所有連接的狀態,考慮連接池和應用由不同開發人員實現時這種問題更容易出現。

綜合上面提到的兩個問題,我們來討論一下如何解決這兩個要命的問題。

首先我們先設身處地的考慮一下用戶是想怎么樣來使用這個數據庫連接池的。用戶可以通過特定的方法來獲取數據庫的連接,同時這個連接的類型應該是標準的java.sql.Connection。用戶在獲取到這個數據庫連接后可以對這個連接進行任意的操作,包括關閉連接等。

通過對用戶使用的描述,怎樣可以接管Connection.close方法就成了我們這篇文章的主題。

為了接管數據庫連接的close方法,我們應該有一種類似于鉤子的機制。例如在Windows編程中我們可以利用Hook API來實現對某個Windows API的接管。在JAVA中同樣也有這樣一個機制。JAVA提供了一個Proxy類和一個InvocationHandler,這兩個類都在java.lang.reflect包中。我們先來看看SUN公司提供的文檔是怎么描述這兩個類的。


public interface InvocationHandler

InvocationHandler is the interface implemented by the invocation handler of a proxy instance.

Each proxy instance has an associated invocation handler.
When a method is invoked on a proxy instance,
the method invocation is encoded and dispatched to the invoke method of its invocation handler.




SUN的API文檔中關于Proxy的描述很多,這里就不羅列出來。通過文檔對接口InvocationHandler的描述我們可以看到當調用一個Proxy實例的方法時會觸發Invocationhanlder的invoke方法。從JAVA的文檔中我們也同時了解到這種動態代理機制只能接管接口的方法,而對一般的類無效,考慮到java.sql.Connection本身也是一個接口由此就找到了解決如何接管close方法的出路。

首先,我們先定義一個數據庫連接池參數的類,定義了數據庫的JDBC驅動程序類名,連接的URL以及用戶名口令等等一些信息,該類是用于初始化連接池的參數,具體定義如下:


public class ConnectionParam implements Serializable
{
private String driver;//數據庫驅動程序
private String url;//數據連接的URL
private String user;//數據庫用戶名
private String password;//數據庫密碼
private int minConnection = 0;//初始化連接數
private int maxConnection = 50;//最大連接數
private long timeoutValue = 600000;//連接的最大空閑時間
private long waitTime = 30000;//取連接的時候如果沒有可用連接最大的等待時間


主站蜘蛛池模板: 手机亚洲第1页 | 伊人成人在线 | 午夜影院免费视频 | 日韩精品魔镜号系列在线观看 | 午夜成人免费影院 | 婷婷丁香五月中文字幕 | 特色一级片| 日本骚片 | 四虎在线视频免费观看 | 天天做夜夜做 | 手机看片99 | 青青在线观看视频 | 四虎影视成人永久在线播放 | 亚州视频在线 | 欧美一级黄色录相 | 青青青草免费 | 亚洲狼网站狼狼鲁亚洲下载 | 日本三级一区 | 欧美一级在线观看视频 | 亚洲成a人片在线观看中文!!! | 伊人色在线 | 全部免费毛片免费播放 | 欧美性野久久久久久久久 | 色丁香在线 | 三级黄色在线播放 | 欧美特级淫片 | 日本网站在线看 | 日韩免费毛片全部不收费 | 手机看片高清日韩精品 | 欧美专区综合 | 视频国产91| 日本一区二区视频在线 | 情侣国产 | 亚洲欧美综合网 | 日韩淫片 | 特一级黄色 | 日韩有码第一页 | 青青草原影视 | 亚洲国产精品久久精品成人 | 青娱乐国产盛宴 | 日韩成人在线免费视频 |