什么是 JDBC 驅動
說白了 JDBC 驅動就是一組實現了 JDBC API 接口的 Java 類的集合,該接口用于與數據庫服務器進行交互。例如,使用 JDBC 驅動程序可以讓你打開數據庫連接,并通過發送 SQL 或數據庫命令,然后通過 Java 接收結果。
JDK 中的 java.sql 包中定義了各種數據庫操作相關的接口,這些接口的實現類交由第三方驅動程序中完成。第三方供應商在他們的數據庫驅動程序中都實現了 java.sql.Driver 接口。
四種類型
以下四種類型的定義摘自維基百科
Type 1 : JDBC-ODBC bridge
Type 2 : Native-API driver
Type 3 : Network-Protocol driver (Middleware driver)
Type 4 : Database-Protocol driver (Pure Java driver) or thin driver
類型1:JDBC-ODBC 橋
在類型1中,一個 JDBC 橋接器是用來訪問安裝在每個客戶機上的 ODBC 驅動程序。為了使用 ODBC,需要在目標數據庫上配置系統數據源名稱(DSN)。這種類型的驅動把所有 JDBC 的調用傳遞給ODBC,再讓后者調用數據庫的本地驅動代碼。在 Java 剛出來的時候,這是一種很有用的方式,因為那時大多數的數據庫只支持 ODBC 訪問,但現在此類型的驅動程序僅適用于實驗用途或在沒有其他選擇的情況。
優點:
易于使用。
只要有對應的 ODBC 驅動(大多數數據庫廠商都會提供),所以幾乎可以訪問所有的數據庫。缺點:
執行效率比較低,不適合大數據量訪問的應用。
需要客戶端預裝對應的 ODBC 驅動。
類型2:本地 API 驅動
在類型2中,JDBC API 調用轉換成原生的 C/C++ API 的本地調用,這對于數據庫來說具有唯一性。這些驅動程序通常由數據庫供應商提供,并和 JDBC-ODBC 橋驅動程序的使用方式一樣。該供應商的驅動程序同樣必須安裝在每臺客戶機上。
優點:
速度快于Type 1(但比不上Type 3、Type 4)。缺點:
需要客戶端預裝對應的數據庫廠商代碼庫。
預裝的代碼庫不是通用的,每家廠商各自獨立,所以也依賴于數據庫廠商。
類型3:網絡協議驅動
在類型3中,JDBC 先把對數據庫的訪問請求傳遞給中間件服務器。中間件服務器再把請求翻譯為符合數據庫規范的調用,再把這種調用傳給數據庫服務器。如果中間件服務器也是用 java 開發的,那么在在中間層也可以使用Type 1、Type 2 這兩種 JDBC 驅動方式訪問數據庫。
優點:
不需要在客戶端加載數據庫廠商提供的代碼庫。
單個驅動程序可以對多個數據庫進行訪問,可擴展性較好。
支持數據庫連接、查詢結果的緩存,負載均衡,日志,監控等。缺點:
在中間件層仍需對最終數據進行配置。
由于多出一個中間件層,速度不如 Type 4。
類型4:數據庫協議驅動
類型4是純粹的基于 Java 的驅動程序,通過 Socket 連接與廠商的數據庫進行通信。這是可用于數據庫的最高性能的驅動程序,并且通常由廠商自身提供。
這種驅動器是非常靈活的,你不需要在客戶端或服務端上安裝特殊的軟件。此外,這些驅動程序是可以動態下載的。
MySQL Connector/J 的驅動程序是一個 Type 4。因為它們的網絡協議的專有屬性,數據庫供應商通常提供 Type 4的驅動程序。
優點:
平臺獨立的。
相比于前三種方式不需要中間的媒介。
應用程序直接同數據庫服務器通信。
訪問速度最快。
這是最直接、最純粹的 Java 實現。缺點:
幾乎只有數據庫廠商自己才能提供這種類型的JDBC驅動。
需要針對不同的數據庫使用不同的驅動程序。
如何選擇
如果你正在訪問一個數據庫,如 Oracle,Sybase 或 IBM,首選的驅動程序是類型4。
如果你的 Java 應用程序同時訪問多個數據庫類型,首選的是類型3。
類型2是在你的數據庫沒有提供類型3或類型4驅動程序時使用的。
類型1被認為不適合在生產種使用,它存在的目的通常僅用于開發和測試。