劉 娟
蚌埠學院計算機科學與技術系,安徽 蚌埠 233000
使用JDBC訪問數據庫時,先加載相應驅動,接著創建連接對象,向連接對象發送SQL語句訪問數據庫,使用完畢后關閉連接對象。普通WEB應用訪問數據庫的頻率低,可以滿足要求。但如果客戶端數量非常多,系統會不斷創建、關閉連接,頻繁進行內存操作,影響系統性能。另外,程序異常可能導致系統不能及時釋放連接對象,產生內存泄露,導致內存資源耗盡。為了解決這些問題,可以采用連接池技術,從而減少不必要系統開銷,避免內存泄露,提高系統性能。
連接池技術原理是預先創建容器對象,并放入一些連接對象。需要使用連接對象時,直接從連接池中獲取。用完后不關閉連接對象,將其放回連接池。連接池可以通過設置最少連接數和最大連接數來保持可用對象數量和避免無限制使用連接對象。
1)建立連接池。連接池的基本功能就是管理連接對象。創建連接池時,可以預先分配指定數量的連接對象放入集合類中,分配和釋放都將對集合類進行操作,可以減少由頻繁內存操作帶來的系統開銷。
2)獲取與釋放連接對象。需要連接對象時,先獲取連接池中空閑連接對象,沒有則獲取某個連接對象進行復用。這里采用的復用技術為引用計數法。引用計數表示資源使用者的數量。首先為每個連接對象提供一個引用計數,初始化引用計數為0,使用時引用計數加1。連接對象使用完畢,引用計數減1。若引用計數為0,則表示連接對象處于空閑狀態,將其放回連接池中,等待再次使用。
3)定時管理。定時檢查連接池內連接對象狀態,更好地保證連接池穩定。當連接對象數量少于預定數量,向連接池內添加新對象。遍歷每個對象,處于關閉狀態,則釋放其所占內存。如果處于空閑狀態,通過其空閑時間來決定是否關閉。如果處于使用狀態,通過其使用時間來選擇是否關閉。
4)事務處理。進行數據庫事務處理,需符合“All or Nothing”原則。連接對象復用時很難保證事務處理的原子性。這里采取給連接對象增加標識是否進行事務處理屬性。如果是則不允許復用。
5)并發處理。同一時刻可能會有多個線程訪問連接對象,JAVA中使用synchronized關鍵字可以保證多線程操作同步。
6)多連接池設計。某些系統需要多用戶連接多數據庫,就需要同時管理多個連接池。可以采用配置文件來配置和管理多個連接池。
本文在實現連接池時,主要包含兩部分:連接池類(CConnPool)、連接池管理類(CConnManager)。
連接池類主要提供創建連接池、獲取可用連接對象、回收連接對象、定時管理連接池、關閉連接池等接口。其主要屬性和方法為:

連接池管理類主要實現加載相應JDBC驅動、加載配置文件、創建連接池、獲取與回收連接對象。其主要屬性和方法為:

連接池降低了內存操作頻率,優化了數據庫訪問接口,提高了系統性能。當然,對連接池進行優化不僅有這些技術,還需要考慮到對Statement和Resultset對象的優化,有待于進一步研究。
[1]布雷恩·賴特著.JSP數據庫編程指南[M].趙明昌,譯.北京:希望電子出版社,2001.
[2]Maydene Fisher,等.JDBC API Tutorial andReference,3rd Edition[M].Addison Wesley,2003.