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