Java應用程序訪問數據庫基本原理:
在Java語言中,JDBC(Java DataBase Connection)是應用程序與數據庫溝通的橋梁 .
一般來說,Java應用程序訪問數據庫的過程是:
①裝載數據庫驅動程序;
②通過JDBC建立數據庫連接;
③訪問數據庫,執行SQL語句;
④斷開數據庫連接。
JDBC作為一種數據庫訪問技術,具有簡單易用的優點。但使用這種模式進行Web應用程序開發,存在很多問題:首先,每一次Web請求都要建立一次數據庫連接。建立連接是一個費時的活動,每次都得花費0.05s~1s的時間,而且系統還要分配內存資源。這個時間對於一次或幾次數據庫操作,或許感覺不出系統有多大的開銷。可是對於現在的Web應用,尤其是大型電子商務網站,同時有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進行數據庫連接操作勢必占用很多的系統資源,網站的響應速度必定下降,嚴重的甚至會造成服務器的崩潰。
其次,對於每一次數據庫連接,使用完后都得斷開。否則,如果程序出現異常而未能關閉,將會導致數據庫系統中的內存泄漏,最終將不得不重啟數據庫。還有,這種開發不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去,如連接過多,也可能導致內存泄漏,服務器崩潰。
數據庫連接池的工作原理
為解決上述問題,可以采用數據庫連接池技術。數據庫連接池的基本思想就是為數據庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更為重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量﹑使用情況,為系統開發﹑測試及性能調整提供依據。連接池的基本工作原理
連接池關鍵問題分析
為了使連接管理服務具有最大的通用性,必須考慮多線程環境,即並發問題。這個問題相對比較好解決,因為Java語言自身提供了對並發管理的支持,使用synchronized關鍵字即可確保線程是同步的。使用方法為直接在類方法前面加上synchronized關鍵字,如: public synchronized Connection getConnection()
Hibernate中C3P0連接池組件的配置
C3PO是一個數據庫連接池,Hibernate可以配置為使用C3PO連接池。
<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">15</property>
<property name="hibernate.c3p0.min_size">1</property>
<property name="hibernate.c3p0.timeout">1800</property>
<property name="hibernate.c3p0.max_statements">1000</property>
<property name="hibernate.c3p0.idle_test_period">30000</property>
<property name="hibernate.c3p0.acquire_increment">1</property>
<property name="hibernate.c3p0.validate">false</property>
C3p0:
hibernate.c3p0.max_size 最大連接數
hibernate.c3p0.min_size 初始連接數
hibernate.c3p0.timeout
數據庫連接對象最大持有時間(以秒為單位)
hibernate.c3p0.max_statements
最大可緩存數據庫語句對象,設為0則不緩存
hibernate.c3p0.acquire_increment
當連接池耗盡並接到獲得連接的請求,則新增加連接的數量
hibernate.c3p0.idle_test_period
在連接空閑多少秒后,檢查連接
hibernate.c3p0.validate
檢查連接,推薦使用hibernate.c3p0.idle_test_period_代替,默認值為false