林晶晶 王夢佳 楊文暉
【摘要】隨著Java Web的迅速發展,數據庫連接已成為應用程序開發中的主要問題之一,連接數據庫的效率也成為直接影響應用程序執行效率的因素。本文以Oracle數據庫系統為例,詳細介紹了在Java程序中訪問數據庫的傳統數據庫的連接方法和數據庫連接池技術,并對此進行了分析和比較。
【關鍵詞】Java;數據庫;JDBC;連接池
1.引言
隨著Java Web技術和計算機網絡的迅速發展,人們對網絡資源的共享提出了更高的要求。在網絡環境中,對于數據的訪問往往都是非常頻繁的。在Java Web的應用程序開發中使用Java訪問數據庫,是整個應用程序開發過程中的主要問題之一。下面就將以Oracle數據庫系統為例,闡述在Java程序中訪問數據庫的傳統的數據庫連接方法和數據庫連接池技術。
2.傳統的數據庫連接方法
2.1 JDBC簡介
JDBC是用java連接數據庫最為傳統的方法,下面詳細闡述在java程序中它具體是怎么實現的。
2.1.1 JDBC概念
JDBC的全稱是Java Database Connectivity,即Java數據庫連接。JDBC是標準的Java訪問數據庫的API。JDBC定義了數據庫的連接、SQL語句的執行以及查詢結果集的遍歷等。它由一組用Java編程語言編寫的類和接口組成,位于包java.sql下面,如java.sql.Connection,java.sql.Statement,java.sql.ResultSet等。JDBC提供給Java程序使用的,它將各種數據庫的差異對Java程序屏蔽了起來,Java程序可以使用同樣的可移植的接口訪問數據庫,使Java的應用程序屏蔽了數據庫領域,同時保持了Java語言的“一次編寫,各處運行”的優點。
2.1.2 JDBC的結構
JDBC主要有兩類接口:面向程序開發人員的JDBC API和面向JDBC驅動程序的JDBC DRIVER API。前者是開發人員用來編寫前端應用程序的,后者是由數據庫廠商開發的。
(1)JDBC API由兩個部分組成,一個是核心的API,其類包路徑為javax.sql,這是J2EE的一部分,它具有可滾動的結果集、批量更新的實現類。另一個是擴展的API,其類包的路徑為javax.sql,這是J2EE的一部分,它具有訪問JNDI資源、分布式事務等實現類。四個重要的JDBC API接口:
Java.sql.DriverManager:用于加載驅動程序和建立新的數據庫鏈接。
Java.sql.Connection:完成對某一指定數據庫的鏈接。
Java.sql.Statement:管理在指定數據庫連接上的SQL語句的執行。
Java.sql.ResultSet:用來從數據庫返回的結果集。
(2)JDBC Driver API是面向驅動程序開發商的編程接口。
JDBC驅動程序根據其實現方式分為4種類型:
JDBC-ODBC bridgedriver(JDBC-ODBC橋接方式);
Native-API Partly-Java driver(本地API方式);
Net-ProtocolAll-Java driver(網絡協議方式);
Native-Protocol All-Java driver(本地協議方式)。
這四種方式用于不同的場合,它們的運行效果也不相同。選擇合適和正確的JDBC驅動程序,是提高數據庫訪問效率時應該考慮的一個重要因素。
2.1.3 JDBC的功能
(1)JDBC的基本功能如下:連接數據庫;向數據庫執行查詢操作;向數據庫執行更新操作;向數據庫執行插入操作;向數據庫執行刪除操作;執行存儲過程。
(2)JDBC支持數據庫訪問的兩層和三層模型。兩層模型是Java應用程序或Apple直接與數據庫進行交互操作的模型;三層模型是在應用與數據庫之間,有一個中間應用服務器。
2.2 JDBC的實現
通過JDBC可以用Java訪問遠程oracle數據庫和本地oracle數據庫,方法是一樣的。但在加載驅動包是應該注意要根據所使用的相應的JDK環境來加載相應的包。需要注意的是
classes12.jar:for Java 1.2 and 1.3
ojdbc14.jar:for Java 1.4 and 1.5
ojdbc5.jar:for Java 1.5
ojdbc6.jar:for Java 1.6
本文用的是Java 1.6,所以加載的是ojdbc6.jar這個包。
具體實現的部分代碼如下:
這里的url的格式應該為:
String url= "jdbc:oracle:thin:@"+ip+":"+port+":"+dbName;
其中ip為要訪問的數據庫的IP地址,port為要訪問的數據庫的端口號,dbName為要訪問的數據庫名。
3.數據庫連接池的連接技術
3.1 數據庫連接池簡介
數據庫連接池(Connection pool),它是程序啟動時建立足夠的數據庫連接,并將這些連接組成一個連接池,由程序動態地對池中的連接進行申請、使用、釋放。
數據庫連接池基本的思想是在系統初始化的時候,將數據庫連接作為對象存儲在內存中,當用戶需要訪問數據庫時,并非要建立一個新的連接,而是從連接池中取出一個已建立的空閑連接對象。使用完畢后,用戶也并非要將連接關閉,而是將連接放回連接池中,以供下一個請求訪問使用。而連接的建立、斷開都由連接池自身來管理。同時,還可以通過設置連接池的參數來控制連接池中的初始連接數、連接的上下限數以及每個連接的最大使用次數、最大空閑時間等等。也可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。
3.2 數據庫連接池影響因素
(1)最小連接數:是連接池一直保持的數據庫連接。(2)最大連接數:是連接池能申請的最大連接數。(3)最小連接數與最大連接數相差太大:那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價于建立一個新的數據庫連接。
3.3 數據庫連接池運行機制
(1)從連接池獲取或者創建可使用的連接。(2)使用完畢之后,把所使用的連接返還給連接池。(3)在系統關閉前,斷開所有連接并釋放連接占用的系統資源。(4)還能夠處理無效連接,并且能夠限制連接池中的連接總數不低于某個預定值和不超過某個預定值。
3.4 數據庫連接池實現
在Java中常用的數據庫連接池有C3P0、Proxool、DBCP、BoneCP、Druid、Tomcat jdbc pool等等。本文運用的是Tomcat jdbc pool。
Tomcat jdbc pool是Tomcat7新的連接池。Tomcat 在7.0以前的版本都是使用commons-dbcp作為連接池的實現,但是Tomcat從7.0開始引入一個新的模塊:Tomcat jdbc pool。Tomcat jdbc pool可在Tomcat中直接使用,也可以在獨立的應用中使用。若tomcat jdbc pool在java中單獨使用,加入tomcat-jdbc.jar和tomcat-juli.jar這兩個包就可以了;若作為數據源使用的話,就要借助于Spring框架,用它來管理tomcat jdbc-pool的連接。在工程中還要導入三個包:spring-contex-3.2.2.RELEASE.jar, spring-core-3.2.2.RELEASE.jar,org.springframework.beans-3.1.0.M1.jar.還要將配置好的數據源文件DSPoolAppContext.xml放入相應的目錄下。這樣工程才可以運行。下面以作為數據源使用來具體說明。
(1)DSPoolAppContext.xml配置文件的部分代碼。
(2)在java中使用數據源的代碼。
4.傳統數據庫連接的方法與數據庫連接池技術的比較
JDBC作為一種數據庫訪問技術,具有簡單易用的優點。但使用這種方式進行Web應用程序開發,存在很多問題:首先,每一次Web請求都要建立一次數據庫連接。建立連接是一個費時的活動,而且系統還要分配內存資源。這個時間對于一次或幾次數據庫操作,或許感覺不出系統有多大的開銷。可是對于現在的Web應用,尤其是大型電子商務網站,同時有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進行數據庫連接操作勢必占用很多的系統資源,網站的響應速度必定下降。還有,這種開發不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去。因此為了提高數據庫的連接效率而采用了數據庫連接池技術。使用數據庫連接池的好處有:資源重用;更快的系統響應時間;統一的連接管理,避免數據庫連接泄漏。所以使用數據庫連接技術可以解決傳統數據庫連接所出現的問題。另外本文用到的連接池是Tomcat7.0中的tomcat jdbc pool,而它又具有以下特點:它近乎兼容dbcp,性能更高;通過異步方式獲取連接;支持高并發應用環境;比較簡單;有更好的空閑連接機制等等。
5.總結
本文以Oracle數據庫系統為例,闡述了在Java程序中訪問數據庫的傳統的數據庫連接方法和數據庫連接池技術并進行了分析比較。但本文中仍存在一些不足的地方,接下來的工作是通過更多的測試來不斷完善。
參考文獻
[1]羅榮,唐學兵.基于JDBC的數據庫連接池的設計與實現[J].計算機工程,2004.
[2]何洪舟.Java程序中訪問Oracle數據庫的技術分析與實現[J].計算機應用與軟件,2007.
[3]陳虹君.Java Web與數據庫連接池技術的應用研究與實踐[D].2008.
[4]李剛.Java數據庫技術詳解[M].北京工業出版社,2010.
[5]百度百科.[EB/OL].http://baike.baidu.com/view/84055.htm?fr=Aladdin.
[6]Apache Tomcat 7官網.The Tomcat JDBC Connection Pool. https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html.
作者簡介:林晶晶(1986—),女,甘肅臨洮人,成都理工大學信息科學與技術學院碩士研究生在讀,研究方向:計算機網絡應用技術。