簡介
JDBC(Java Database Connectivity, Java 數 據 庫 連 接)是 一 種可用於執行 SQL 語句的 Java API(Application Programming Interface, 應用程式設計接口)。它由一些 Java 語言編寫的類和接口組成。JDBC 為資料庫套用開發人員、資料庫前台開發人員提供了一種標準的應用程式設計接口, 使開發人員可以用純 Java 語言編寫完整的資料庫應用程式。JDBC 通過調用其接口提供的方法, 提供了 Java 應用程式與各種資料庫伺服器之間的連線服務, 它支持 ANSI SQL- 92 標準, 實現了從 Java 程式內調用標準的 SQL 命令對資料庫進行查詢、插入、刪除和更新等操作, 並確保數據事務的正常進行。JDBC API 主要用來連線資料庫並通過 SQL 語句運算元據庫。它可以執行一般的 SQL 語句、動態 SQL 語句及帶 IN 和 OUT參數的存儲過程。通過使用 JDBC 簡化了開發資料庫套用的複雜度, 加快了開發速度。開發人員可以很方便地將 SQL 語句傳送給幾乎任何一種資料庫。而且 JDBC 支持所有的作業系統, 使得 Java 應用程式不再需要為每個應用程式編寫額外的驅動。2.JDBC 的體系結構JDBC 是實現 Java 應用程式與各種不同資料庫對話的一種機制。JDBC 由兩部分與資料庫獨立的 API 組成, 一部分是面向程式開發人員的 JDBC API, 另一部分是面向底層的 JDBC Driv-er API。JDBC 提供了一個通用的 JDBC Driver Manger, 用來管理各種資料庫軟體商提供的 JDBC 驅動程式, 從而訪問其資料庫。此外, 對沒有提供相應 JDBC 驅動程式的資料庫系統, 開發了特殊的驅動程式: JDBC- ODBC 橋, 該驅動程式支持 JDBC 通過現有的 ODBC 驅動程式訪問其資料庫系統。JDBC 的基本層次結構由 Java 程式、JDBC 驅動程式管理器、驅動程式和資料庫四部分組成 。
JDBC驅動程式
根據訪問資料庫的技術不同, JDBC 驅動程式相應地分為四種類型。不同類型的驅動程式有著不一樣的特性和使用方法。
分類
JDBC-ODBC橋驅動程式(JDBC-ODBC Bridge Driver)
此類驅動程式由JDBC-ODBC橋和一個ODBC驅動程式組成。其工作原理是,通過一段本地C代碼將JDBC調用轉化成ODBC調用。這一類型必須在本地計算機上先安裝好ODBC驅動程式,然後通過JDBC-ODBCBridge的轉換,將Java程式中使用的JDBCAPI訪問指令轉化成ODBCAPI指令,進而通過ODBC驅動程式調用本地資料庫驅動代碼完成對資料庫的訪問。
部分Java的本地JDBCAPI驅動程式
JDBC API驅動程式(Anative API partly Java technology-enabled Driver)此類驅動程式也必須在本地計算機上先安裝好特定的驅動程式(類似ODBC),然後通過PartialJavaJDBCDriver的轉換,把Java程式中使用的JDBC API轉換成NativeAPI,進而存取資料庫。
純Java的資料庫中間件驅動程式
純Java的資料庫中間件驅動程式(Pure Java Driver for Database Middleware)使用這類驅動程式時,不需要在本地計算機上安裝任何附加軟體,但是必須在安裝資料庫管理系統的伺服器端加裝中間件(Middleware),這箇中間件負責所有存取資料庫時必要的轉換。其工作原理是:驅動程式將JDBC訪問轉換成與資料庫無關的標準網路協定(通常是HTTP或HTTPS)送出,然後再由中間件伺服器將其轉換成資料庫專用的訪問指令,完成對資料庫的操作。中間件伺服器能支持對多種資料庫的訪問。
純Java的JDBC驅動程式
純Java的JDBC驅動程式(Direct-to-DatabasePureJavaDriver)這類驅動程式是直接面向資料庫的純Java驅動程式,即所謂的"瘦"驅動程式。使用這類驅動程式時無需安裝任何附加的軟體(無論是本地計算機或是資料庫伺服器端),所有存取資料庫的操作都直接由JDBC驅動程式來完成,此類驅動程式能將JDBC調用轉換成DBMS專用的網路協定,能夠自動識別網路協定下的特殊資料庫並能直接創建數據連線。
JDBC驅動程式的選擇
在企業內部信息系統中,選擇合適的JDBC驅動程式,使之符合資料庫程式設計的要求,是提高系統性能必須考慮的一個方面。開發者選擇一種驅動時,需要權衡速度、可靠性和可移植性。不同的套用有不同的需要,一個獨立的圖形程式總要運行在Windows系統下,使用第二類驅動能夠提高速度;一個Applet使用第三類驅動,可能是要穿過防火牆;一個Servlet要適應不同的作業系統,則需要使用第四類驅動。
這四類驅動程式中,第一類最節省投資。由於利用了已有的ODBC驅動程式,開發人員不必做額外的開發工作。但是,這種方式的缺點是比較突出的:首先,這種方式由於需要首先把JD-BC操作翻譯成對應的ODBC調用,然後這些調用又被傳送給ODBC驅動程式,最後才執行資料庫的相關操作,所以性能受到影響,執行效率比較低,不適合對大數據量存取的套用。其次,由於事先需要安裝其他附加的軟體(ODBC驅動),有損Java資料庫程式的兼容性,不具備跨平台性,不適合基於Internet/Intranet的套用。再次,這類驅動程式不支持完整的Java命令集,而只局限於ODBC驅動程式的功能。由於以上的缺點,橋接驅動程式用於已經在ODBC技術上投資的情形,例如已經投資了Windows套用伺服器。Sun建議第一類驅動程式只用於原型開發,而不要用於正式的運行環境。
第二種方式具有開放性,其利用多層結構,上層用Java實現,支持多資料庫,下層為本地代碼(包括一些二進制代碼和一個輕量的Java庫),加快了執行速度,提高了資料庫訪問效率。然而,這種方式也有許多缺點:首先,第二類驅動程式也必須事先安裝其他附加的軟體(網路庫),沒有使用純Java的API,很多時候,在體系結構上不能與大型主機的數據源兼容,即使做到了兼容,效果也是不盡人意。其次,本地化的代碼增加了應用程式的危險性:如果在本地代碼中存在缺陷,將可能使Java虛擬機完全垮掉。再次,第二類驅動程式要求編寫面向特定平台的代碼,使用這些驅動程式的開發者必須及時跟進不同資料庫廠商針對不同作業系統發行的各個驅動程式版本。最後,客戶端裝入的網路庫,同樣會影響驅動程式的性能。由於以上的缺點,使第二類驅動程式的使用受到了限制。
第三類驅動程式是由純Java語言開發而成的,並且中間件也僅需要在伺服器上安裝,不再需要客戶端的本機代碼,這類驅動程式的體積最小,效率較高,具有最大的靈活性。而且,此類驅動採用標準的網路協定,可以被防火牆支持,是開發Applet程式理想的選擇(其實這些驅動是為Applet特別編寫的),是Internet套用理想的解決方案。另外,開發者還可以利用單一的驅動程式連線到多種資料庫。由於此種JDBC驅動程式提供了許多企業級的特徵,因而非常適合用戶的特殊用途,如:SSL安全、分散式事務處理等。如果用戶未來擴張套用需要多個資料庫,則選擇這種方式是最理想的。由於它具有較好的性能和安全性,廣泛套用於基於Web的套用系統的開發。其不足之處是:需要在伺服器端安裝中間件,這適當影響了驅動程式的效率。
第四類驅動程式可能是最佳的JDBC驅動程式類型。這是一類新型的驅動程式,它由資料庫廠商提供,能夠實現對於本公司資料庫系統的最最佳化訪問。它無需安裝任何附加軟體,不會增加任何額外開銷,並且由純Java語言開發而成,允許從客戶機到資料庫伺服器的直接調用,能夠自動識別網路協定下的特殊資料庫並能直接創建數據連線,因此這種驅動程式的效率最高,擁有最佳的兼容性。然而,這種驅動也有它的不足:首先,由於使用DBMS專用的網路協定,可能不被防火牆支持,在Internet中會存在潛在安全隱患,成為這類驅動最大的缺陷。其次,不同DBMS的驅動程式不同,在一個異構計算環境中,驅動程式的數量可能會比較多。雖然有以上缺點,但是瑕不掩玉,此類驅動程式的諸多優點使得它的缺點並不突出,在企業級套用軟體中,是應優先考慮的。因此,一個Servlet程式,要適應不同的作業系統,最好使用此類驅動;這種驅動也非常適合Applet程式,事實證明它能安全通過TCP/IP協定連線到資料庫。
一般情況下,在開發Applet應用程式時,根據應用程式的具體要求和資料庫系統的特點,選擇第三類驅動程式或第四類驅動程式。
實例
類型3 JDBC(java database connectivity)驅動程式
類型3 JDBC(java database connectivity)驅動程式是目前套用最為廣泛的JDBC驅動程式,其實現技術被眾多的驅動程式開發團體和個人所關注。目前,眾多資料庫廠商只是提供成型的產品,而沒有公開它們的程式實現代碼,因此僅憑成型的產品,要想知道類型3 JDBC驅動程式的實現過程非常困難 。
JDBC驅動程式由驅動類和資料庫訪問類組成。驅動類實現JDBC的Drive接口,具有自動註冊功能。資料庫訪問類分別實現了JDBC規範中定義的資料庫訪問接口,在JDBC 1.2規範中主要包含有Connection(連線接口),Statement(語句接口)和ResultSet(結果集接口)三種接口。JDBC驅動程式工作過程可分為載入階段、建立連線階段和數據訪問階段。其中:載入階段將驅動類實例註冊到DriverManager(驅動程式管理器)中,為下一步建立資料庫連線作準備。 Driver-Manager是一個JDBC驅動程式管理器,所有的驅動程式使用前都必須在其上登記註冊,它提供對所有已註冊驅動程式的管理。
建立連線階段將建立資料庫連線的請求傳送給DriverManager, DriverManager將根據接收到的資料庫URL地址(不同驅動程式定義的URL地址的格式不同)選擇合適的資料庫驅動程式,最終由驅動程式的驅動類實例創建資料庫連線對象。數據訪問階段則進行真正的資料庫操作,通過創建不同的Statement和ResultSet對象以及調用這些對象的方法來實現。類型3 JDBC驅動程式在遵守上述工作過程的同時又具有自身的特點,其系統結構見圖 。
從圖可見,類型3 JDBC驅動程式為兩層結構,它由驅動程式客戶端程式和驅動程式伺服器端程式組成。客戶端直接與用戶互動,它為用戶提供符合JDBC規範的資料庫統一編程接口,客戶端將資料庫請求通過特定的網路協定傳送給伺服器。伺服器充當中間件的角色,它負責接收和處理用戶的請求以及支持對多種資料庫的操作。從圖1還可知,類型3 JDBC驅動程式自身並不直接與資料庫互動,而是藉助於其他已實現的資料庫驅動程式,成為“僱主”。可以想像,它“僱傭”的資料庫驅動程式越多,則可支持的資料庫就越多,“僱傭”的資料庫驅動程式越強大,則類型3JDBC驅動程式的功能也越強大。除此之外,“僱傭”的資料庫驅動程式的數量和成員可以動態改變,以滿足系統擴展的需求。類型3 JDBC驅動程式的這一特性正是它強大的根源所在。