馮永亮,王 茹
(1.西安文理學(xué)院數(shù)學(xué)與計算機工程學(xué)院,陜西西安,710065)
(2.西安軍需工業(yè)學(xué)校,陜西西安,710068)
作為Java EE 技術(shù)框架中的核心服務(wù)技術(shù),JDBC(Java Database Connectivity,Java 數(shù)據(jù)庫連接)提供了Java 程序與數(shù)據(jù)庫之間的連接服務(wù)。
JDBC 體系結(jié)構(gòu)主要由以下幾層構(gòu)成:Java Application 層,JDBC API 層、JDBC Driver Manager 層和Database 層,如圖1所示。其中,Java Application 層包括Java 應(yīng)用程序和Java小應(yīng)用程序。JDBC API 層屏蔽了不同數(shù)據(jù)庫驅(qū)動程序之間的差別,為在Java 中訪問任意類型的數(shù)據(jù)庫提供了技術(shù)支持。JDBC Driver Manager 層能夠動態(tài)的管理和維護數(shù)據(jù)庫查詢所需的驅(qū)動程序?qū)ο?,進而實現(xiàn)程序與特定驅(qū)動程序的連接。Database Driver 將應(yīng)用程序數(shù)據(jù)處理要求,轉(zhuǎn)換為DBMS 能夠理解的命令。Database 層包括要訪問的數(shù)據(jù)庫及數(shù)據(jù)庫管理系統(tǒng)。
圖1 JDBC 兩層結(jié)構(gòu)
目前,JDBC 驅(qū)動程序采用四種工作方式:JDBC-ODBC 橋驅(qū)動、本地API 驅(qū)動、網(wǎng)絡(luò)協(xié)議驅(qū)動和本地協(xié)議驅(qū)動。
此種方式下,JDBC 只需要連接到ODBC,通過ODBC 可以連接到ODBC 支持的任意一種數(shù)據(jù)庫,這種連接方式叫做JDBC-ODBC橋。在圖1 中的JDBC Driver Manager 層和Database Driver 層之間,增加了JDBC-ODBC Bridge 層和ODBC Driver 層,就構(gòu)成了JDBC-ODBC 橋驅(qū)動結(jié)構(gòu)。使用JDBC-ODBC 橋方式的核心代碼是:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
Connectionconn=Driver Manager.getConnection(“jdbc:odbc:數(shù)據(jù)源名稱”);
該驅(qū)動的優(yōu)勢在于:只要本地機裝有ODBC 驅(qū)動,采用JDBCODBC 橋幾乎可以訪問所有的數(shù)據(jù)庫。但是,由于JDBC-ODBC 先調(diào)用ODBC,再由ODBC 去調(diào)用本地數(shù)據(jù)庫接口訪問數(shù)據(jù)庫。執(zhí)行效率比較低,對于那些大數(shù)據(jù)量存取的應(yīng)用是不適合的。
本地API 驅(qū)動方式通過在客戶端加載數(shù)據(jù)庫廠商提供的本地代碼庫來訪問數(shù)據(jù)庫,而在驅(qū)動程序中則包含了Java 代碼。這種驅(qū)動工作方式效率優(yōu)于JDBC-ODBC 橋方式。但是,它仍然需要在客戶端加載數(shù)據(jù)庫廠商提供的代碼庫,不適合基于Internet 的應(yīng)用。本地API 驅(qū)動工作方式在圖1 中的JDBC Driver Manager 層和Database Driver 層之間,增加了Native-API Driver 層。
使用本地API 驅(qū)動工作方式,在JDBC 代碼中,設(shè)定特定的驅(qū)動程序名稱和url。不同的驅(qū)動程序和不同的數(shù)據(jù)庫,應(yīng)采用不同驅(qū)動程序名稱和url。以O(shè)racle 為例,核心代碼如下:
這種驅(qū)動的機制是將JDBC 調(diào)用轉(zhuǎn)換為中間網(wǎng)絡(luò)協(xié)議,然后轉(zhuǎn)換為DBMS 協(xié)議。JDBC 先把對數(shù)據(jù)庫的訪問請求傳遞給網(wǎng)絡(luò)上的中間件服務(wù)器。中間件服務(wù)器再把請求翻譯為符合數(shù)據(jù)庫規(guī)范的調(diào)用,再把這種調(diào)用傳給數(shù)據(jù)庫服務(wù)器。中間網(wǎng)絡(luò)協(xié)議層起到一個讀取數(shù)據(jù)庫的中間件的作用,能夠連接許多類型的數(shù)據(jù)庫,因而是最靈活的JDBC 模式。
此方式不需要在客戶端加載數(shù)據(jù)庫廠商提供的代碼庫,單個驅(qū)動程序可以對多個數(shù)據(jù)庫進行訪問,可擴充性較好。但是,這種驅(qū)動在中間件層仍然需要有配置其它數(shù)據(jù)庫驅(qū)動程序,并且由于多了一個中間層傳遞數(shù)據(jù),執(zhí)行效率不是很高。
這種類型的驅(qū)動使用Socket,直接在客戶端和數(shù)據(jù)庫間通信。驅(qū)動完全由Java 實現(xiàn),因此實現(xiàn)了平臺獨立性。
由于這種驅(qū)動不需要先把JDBC 的調(diào)用傳給ODBC 或本地數(shù)據(jù)庫接口或者是中間層服務(wù)器。所以它的執(zhí)行效率是非常高的,訪問速度也是最快的,安全性也很好。而且,此方式不需要在客戶端或服務(wù)器端裝載任何的軟件或驅(qū)動,是最直接的Java 實現(xiàn)。但是,由于缺乏足夠的文檔和技術(shù)支持,幾乎只有數(shù)據(jù)庫廠商自己才能提供這種類型的JDBC 驅(qū)動,同時也需要針對不同的數(shù)據(jù)庫使用不同的驅(qū)動程序。
3.1 從需要數(shù)據(jù)量操作的角度來說,對于使用Windows 環(huán)境開發(fā)系統(tǒng),或者是較小數(shù)據(jù)量操作的應(yīng)用程序,應(yīng)首先考慮使用JDBC-ODBC 驅(qū)動。
3.2 從執(zhí)行效率看,網(wǎng)絡(luò)協(xié)議驅(qū)動和本地協(xié)議驅(qū)動明顯優(yōu)于前兩者,應(yīng)首先考慮。
3.3 從應(yīng)用看,從internet 應(yīng)用看,只能考慮網(wǎng)絡(luò)協(xié)議驅(qū)動和本地協(xié)議驅(qū)動,因為網(wǎng)絡(luò)協(xié)議驅(qū)動可以把多種數(shù)據(jù)庫驅(qū)動都配置在中間層服務(wù)器,它適合需要同時連接多個不同種類的數(shù)據(jù)庫,并且對并發(fā)連接要求高的應(yīng)用。
3.4 從客戶機部署看,JDBC-ODBC 橋驅(qū)動程序需要在客戶機上安裝的ODBC 驅(qū)動程序,而對于本地API 驅(qū)動,供應(yīng)商需要在客戶機上安裝客戶端庫。后兩種類型則相對簡單一些。
為數(shù)據(jù)庫中的表T_STUDENT 添加一條學(xué)號為“0030”,姓名為“王江”,性別為“男”的記錄。
本實驗的核心在于如何選擇合適驅(qū)動程序。如果考慮使用本地API 驅(qū)動方式,雖然執(zhí)行效率較高,但是需要到數(shù)據(jù)庫廠商網(wǎng)站下載代碼庫,并對應(yīng)的代碼庫安裝到客戶端。如果考慮使用網(wǎng)絡(luò)協(xié)議驅(qū)動,雖然不需要再客戶端進行配置,單個驅(qū)動程序就可以對多個數(shù)據(jù)庫進行訪問,擴充性性好,但是,需要在中間件層配置數(shù)據(jù)庫的驅(qū)動程序,執(zhí)行效率也不高。如果考慮使用本地協(xié)議驅(qū)動方式,考慮需要足夠的技術(shù)支持,獨立通過JAVA 編寫驅(qū)動程序,對于個人或企業(yè)來說,是不現(xiàn)實的。以上三種方式,對于實驗來說,不是最好的選擇。考慮到實驗室?guī)缀跛械碾娔X都能夠很快實現(xiàn)ODBC 配置,采用JDBC-ODBC 數(shù)據(jù)驅(qū)動方式,利用現(xiàn)有的條件,實現(xiàn)對后臺數(shù)據(jù)庫的訪問時可行的。
通過運行測試,證明在此程序中,選用JDBC-ODBC 數(shù)據(jù)驅(qū)動方式,能夠完成實驗的基本內(nèi)容,并且,在環(huán)境配置上簡單可行,執(zhí)行效率適中。
選擇合適的數(shù)據(jù)驅(qū)動程序工作方式,有助于有效部署軟件,提高軟件執(zhí)行效率,降低運行成本,同時提高可維護性。選擇時,需要綜合考慮系統(tǒng)開發(fā)環(huán)境、系統(tǒng)規(guī)模、實施成本、執(zhí)行效率、數(shù)據(jù)庫特征、可擴展性以及對客戶端的依賴程度等。
[1]靳晉.JDBC 技術(shù)淺析[J],中國教育技術(shù)裝備,2011(5):91
[2]劉云玉,段中興,原晉鵬.JDBC 數(shù)據(jù)庫重連機制的研究與實現(xiàn)[J],計算機應(yīng)用與軟件,2011,28(7)38-40
[3]胡廣沖,李建玉,張志超.基于JDBC+ Struts 的在線考試系統(tǒng)的設(shè)計[J],計算機光盤軟件與應(yīng)用,2012(11):219
[4]張俐.基于Spring 和JDBC 的蔬菜運銷管理系統(tǒng)在數(shù)據(jù)持久層的應(yīng)用[J],安徽農(nóng)業(yè)科技,2012,40(7):4401-4403
[5]呂峰,梅細艷,周曉東 基于JDBC 的數(shù)據(jù)庫管理及其應(yīng)用[J],武漢理工大學(xué)學(xué)報,2004,24(10):64-66
[6]羅榮,唐學(xué)兵.基于JDBC 的數(shù)據(jù)庫連接池的設(shè)計與實現(xiàn)[J],計算機工程,2004,30(9):92-93.
[7]郭廣軍,陳代武,胡玉平,李芝城.基于JDBC 的數(shù)據(jù)庫訪問技術(shù)的研究[J],南華大學(xué)學(xué)報(自然科學(xué)版),2005,19(2):50-54.
[8]李德水,陰國富.JDBC 體系結(jié)構(gòu)分析[J].電腦開發(fā)與應(yīng)用,2006,19(10):55-57.