更新時(shí)間:2021-10-25 11:23:12 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1407次
一個(gè)JDBC驅(qū)動(dòng)程序是一個(gè)軟件組件使得Java的應(yīng)用程序與互動(dòng)數(shù)據(jù)庫。JDBC 驅(qū)動(dòng)程序類似于ODBC 驅(qū)動(dòng)程序、ADO.NET 數(shù)據(jù)提供程序和OLE DB 提供程序。
要連接單個(gè)數(shù)據(jù)庫,JDBC(Java 數(shù)據(jù)庫連接API)需要每個(gè)數(shù)據(jù)庫的驅(qū)動(dòng)程序。JDBC 驅(qū)動(dòng)程序發(fā)出與數(shù)據(jù)庫的連接,并實(shí)現(xiàn)在客戶端和數(shù)據(jù)庫之間傳輸查詢和結(jié)果的協(xié)議。
JDBC 技術(shù)驅(qū)動(dòng)程序?qū)儆谒念愔弧?/p>
JDBC-ODBC 橋接
本機(jī) API 驅(qū)動(dòng)程序
網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)程序(中間件驅(qū)動(dòng)程序)
數(shù)據(jù)庫協(xié)議驅(qū)動(dòng)程序(純 Java 驅(qū)動(dòng)程序)或瘦驅(qū)動(dòng)程序。
JDBC 1 類驅(qū)動(dòng)程序,也稱為JDBC-ODBC 橋接器,是一種數(shù)據(jù)庫驅(qū)動(dòng)程序?qū)崿F(xiàn),它使用ODBC驅(qū)動(dòng)程序連接到數(shù)據(jù)庫。驅(qū)動(dòng)程序?qū)?JDBC 方法調(diào)用轉(zhuǎn)換為 ODBC 函數(shù)調(diào)用。
該驅(qū)動(dòng)程序,因?yàn)樗肙DBC的這又依賴于底層的本地庫依賴于平臺(tái)的操作系統(tǒng)的JVM是在運(yùn)行。此外,使用此驅(qū)動(dòng)程序會(huì)導(dǎo)致其他安裝依賴項(xiàng);例如,安裝了該驅(qū)動(dòng)程序的計(jì)算機(jī)上必須安裝ODBC,并且數(shù)據(jù)庫必須支持ODBC 驅(qū)動(dòng)程序。如果有純 Java 驅(qū)動(dòng)程序的替代品可用,則不鼓勵(lì)使用此驅(qū)動(dòng)程序。另一個(gè)含義是,鑒于驅(qū)動(dòng)程序和平臺(tái)之間的綁定,使用類型 1 驅(qū)動(dòng)程序的任何應(yīng)用程序都是不可移植的。該技術(shù)不適合高交易環(huán)境。類型 1 驅(qū)動(dòng)程序也不支持完整的 Java 命令集,并且受到 ODBC 驅(qū)動(dòng)程序功能的限制。
Sun(現(xiàn)在是 Oracle)提供了一個(gè) JDBC-ODBC 橋驅(qū)動(dòng)程序:sun.jdbc.odbc.JdbcOdbcDriver. 此驅(qū)動(dòng)程序是本機(jī)代碼而不是 Java,并且是封閉源代碼。Sun 的/Oracle 的 JDBC-ODBC Bridge 在 Java 8 中被刪除(其他供應(yīng)商的可用)。
如果已編寫驅(qū)動(dòng)程序以便加載它會(huì)導(dǎo)致創(chuàng)建一個(gè)實(shí)例并DriverManager.registerDriver使用該實(shí)例作為參數(shù)進(jìn)行調(diào)用,則它位于 DriverManager 的驅(qū)動(dòng)程序列表中并可用于創(chuàng)建連接。
有時(shí)可能會(huì)出現(xiàn)多個(gè) JDBC 驅(qū)動(dòng)程序能夠連接到給定 URL 的情況。例如,當(dāng)連接到給定的遠(yuǎn)程數(shù)據(jù)庫時(shí),可以使用 JDBC-ODBC 橋驅(qū)動(dòng)程序、JDBC-to-generic-network-protocol 驅(qū)動(dòng)程序或數(shù)據(jù)庫供應(yīng)商提供的驅(qū)動(dòng)程序。在這種情況下,測試驅(qū)動(dòng)程序的順序很重要,因?yàn)?DriverManager 將使用它找到的第一個(gè)可以成功連接到給定 URL 的驅(qū)動(dòng)程序。
首先,DriverManager 嘗試按照注冊(cè)的順序使用每個(gè)驅(qū)動(dòng)程序。(jdbc.drivers 中列出的驅(qū)動(dòng)程序總是首先注冊(cè)。)它將跳過任何不受信任的代碼的驅(qū)動(dòng)程序,除非它們是從與嘗試打開連接的代碼相同的源加載的。
它通過依次調(diào)用每個(gè)驅(qū)動(dòng)程序的 Driver.connect 方法來測試驅(qū)動(dòng)程序,并將用戶最初傳遞給方法的 URL 傳遞給它們DriverManager.getConnection。識(shí)別 URL 的第一個(gè)驅(qū)動(dòng)程序建立連接。
優(yōu)點(diǎn)
幾乎任何安裝了 ODBC 驅(qū)動(dòng)程序的數(shù)據(jù)庫都可以訪問,并且可以檢索數(shù)據(jù)。
缺點(diǎn)
性能開銷,因?yàn)檎{(diào)用必須通過 JDBC(java 數(shù)據(jù)庫連接)橋接至 ODBC(開放數(shù)據(jù)庫連接)驅(qū)動(dòng)程序,然后到達(dá)本機(jī)數(shù)據(jù)庫連接接口(因此可能比其他類型的驅(qū)動(dòng)程序慢)。
需要在客戶端計(jì)算機(jī)上安裝 ODBC 驅(qū)動(dòng)程序。
不適合小程序,因?yàn)榭蛻舳诵枰惭bODBC驅(qū)動(dòng)。
特定的 ODBC 驅(qū)動(dòng)程序并不總是適用于所有平臺(tái);因此,此驅(qū)動(dòng)程序的可移植性受到限制。
JDK 1.8 (Java 8) 不支持。
JDBC 類型 2 驅(qū)動(dòng)程序,也稱為Native-API 驅(qū)動(dòng)程序,是一種使用數(shù)據(jù)庫客戶端庫的數(shù)據(jù)庫驅(qū)動(dòng)程序?qū)崿F(xiàn)。驅(qū)動(dòng)程序?qū)DBC方法調(diào)用轉(zhuǎn)換為數(shù)據(jù)庫 API 的本機(jī)調(diào)用。例如:Oracle OCI 驅(qū)動(dòng)程序是類型 2 驅(qū)動(dòng)程序。
優(yōu)點(diǎn)
由于沒有 JDBC-ODBC 橋的實(shí)現(xiàn),它可能比 Type 1 驅(qū)動(dòng)程序快得多。
缺點(diǎn)
需要在客戶端計(jì)算機(jī)上安裝供應(yīng)商客戶端庫。
并非所有數(shù)據(jù)庫都有客戶端庫。
此驅(qū)動(dòng)程序依賴于平臺(tái)。
此驅(qū)動(dòng)程序支持除小程序以外的所有 Java 應(yīng)用程序。
JDBC 類型 3 驅(qū)動(dòng)程序,也稱為數(shù)據(jù)庫中間件的純 Java 驅(qū)動(dòng)程序,是一種數(shù)據(jù)庫驅(qū)動(dòng)程序?qū)崿F(xiàn),它利用調(diào)用程序和數(shù)據(jù)庫之間的中間層。中間層(應(yīng)用程序服務(wù)器)將JDBC調(diào)用直接或間接轉(zhuǎn)換為特定于供應(yīng)商的數(shù)據(jù)庫協(xié)議。
這與類型 4 驅(qū)動(dòng)程序的不同之處在于協(xié)議轉(zhuǎn)換邏輯不在客戶端,而是在中間層。與類型 4 驅(qū)動(dòng)程序一樣,類型 3 驅(qū)動(dòng)程序完全用 Java 編寫。
同一個(gè)客戶端 JDBC 驅(qū)動(dòng)程序可以用于多個(gè)數(shù)據(jù)庫。這取決于中間件配置為支持的數(shù)據(jù)庫數(shù)量。類型 3 驅(qū)動(dòng)程序與平臺(tái)無關(guān),因?yàn)榕c平臺(tái)相關(guān)的差異由中間件處理。此外,利用中間件提供了額外的安全和防火墻訪問優(yōu)勢。
函數(shù)
將 JDBC API 調(diào)用發(fā)送到中間層網(wǎng)絡(luò)服務(wù)器,該服務(wù)器將調(diào)用轉(zhuǎn)換為 DBMS 特定的網(wǎng)絡(luò)協(xié)議。然后將轉(zhuǎn)換后的調(diào)用發(fā)送到特定的 DBMS。
遵循三層通信方法。
可以連接到多個(gè)數(shù)據(jù)庫——不是特定于供應(yīng)商的。
用 java 編寫的 JDBC Client 驅(qū)動(dòng)程序使用獨(dú)立于數(shù)據(jù)庫的協(xié)議與中間件網(wǎng)絡(luò)服務(wù)器通信,然后該網(wǎng)絡(luò)服務(wù)器將此請(qǐng)求轉(zhuǎn)換為該數(shù)據(jù)庫的數(shù)據(jù)庫命令。
因此,客戶端驅(qū)動(dòng)程序與中間件通信是獨(dú)立于數(shù)據(jù)庫的。
優(yōu)點(diǎn)
由于客戶端和中間件服務(wù)器之間的通信是獨(dú)立于數(shù)據(jù)庫的,因此客戶端上不需要數(shù)據(jù)庫供應(yīng)商庫。無需為新數(shù)據(jù)庫更改客戶端。
中間件服務(wù)器(可以是成熟的 J2EE 應(yīng)用程序服務(wù)器)可以提供典型的中間件服務(wù),如緩存(連接、查詢結(jié)果等)、負(fù)載平衡、日志記錄和審計(jì)。
單個(gè)驅(qū)動(dòng)程序可以處理任何數(shù)據(jù)庫,前提是中間件支持它。
例如:IDA 服務(wù)器
缺點(diǎn)
需要在中間層完成特定于數(shù)據(jù)庫的編碼。
添加的中間件層可能會(huì)導(dǎo)致額外的延遲,但通常可以通過使用更好的中間件服務(wù)來克服。
JDBC 類型 4 驅(qū)動(dòng)程序,也稱為 Direct to Database Pure Java Driver,是一種數(shù)據(jù)庫驅(qū)動(dòng)程序?qū)崿F(xiàn),可將JDBC調(diào)用直接轉(zhuǎn)換為特定于供應(yīng)商的數(shù)據(jù)庫協(xié)議。
4 類驅(qū)動(dòng)程序完全用Java編寫,因此與平臺(tái)無關(guān)。它們安裝在客戶端的Java 虛擬機(jī)中。這提供了比類型 1 和類型 2 驅(qū)動(dòng)程序更好的性能,因?yàn)樗鼪]有將調(diào)用轉(zhuǎn)換為 ODBC 或數(shù)據(jù)庫 API 調(diào)用的開銷。與類型 3 驅(qū)動(dòng)程序不同,它不需要相關(guān)軟件即可工作。
由于數(shù)據(jù)庫協(xié)議是特定于供應(yīng)商的,JDBC 客戶端需要單獨(dú)的驅(qū)動(dòng)程序(通常由供應(yīng)商提供)來連接到不同類型的數(shù)據(jù)庫。
優(yōu)點(diǎn)
完全用Java實(shí)現(xiàn)以實(shí)現(xiàn)平臺(tái)獨(dú)立性。
這些驅(qū)動(dòng)程序不會(huì)將請(qǐng)求轉(zhuǎn)換為中間格式(例如 ODBC)。
客戶端應(yīng)用程序直接連接到數(shù)據(jù)庫服務(wù)器。不使用翻譯或中間件層,提高了性能。
JVM 可以管理應(yīng)用程序到數(shù)據(jù)庫連接的所有方面;這樣可以方便調(diào)試。
缺點(diǎn)
驅(qū)動(dòng)程序是特定于數(shù)據(jù)庫的,因?yàn)椴煌臄?shù)據(jù)庫供應(yīng)商使用廣泛不同的(通常是專有的)網(wǎng)絡(luò)協(xié)議。
如果大家想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面有更豐富的內(nèi)容在等著大家學(xué)習(xí),相信對(duì)大家會(huì)有所幫助的。
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743