2013-07-15 42 views
18

要使用Java連接到數據庫,我們大多數人都使用JDBC API。什麼是JDBC驅動程序的1,2,3或4類型?

我們通常在類路徑中包含像ojdbc14(針對Java 1.4)的驅動程序,在程序中我們使用Class.forName來使用它。

與大多數其他罐子不同,這些進口不是來自ojdbc14,而是來自java.sql,它本身就是rt.jar。那麼,哪種類型的驅動程序(1,2,3,4)用於這些驅動程序?

+0

這裏是[鏈接](http://docs.oracle.com/cd/E19509-01/820-5069/6ngg83nak/index.html)甲骨文的文件,除了偉大的答案的問題。 –

回答

15

您使用的java.sql中的類JDBC接口,因此驅動程序的類型不會在你的代碼中的任何邏輯的影響,它只會有運行時/部署的影響。

您同時還使用Oracle的ojdb14.jar,可能與「瘦」 JDBC配置,這意味着你使用的是類型4驅動程序配置。通過這樣的配置,您只需要在數據庫訪問程序中部署JDBC jar文件。

其他選項包括JDBC橋,這實際上意味着JDBC服裝中包含的ODBC連接。這意味着您必須配置系統以獲得正確的ODBC函數,然後使用JAR文件來訪問ODBC。由於數據通過ODBC的額外「跳躍」,人們會認爲它比類型4訪問慢一點;但是,有可能在特定情況下對ODBC進行了如此大的優化,以致額外的跳數可以忽略不計。與大多數性能問題一樣,通過測試(在您的環境中)發現真相。

類型2驅動程序再次使用Java(JDBC)API;然而,他們將調用連接到C或C++風格的共享庫,然後處理真正的連接。如果驅動程序的優化速度如此之快以至於JNI設置/拆卸調用的成本可以忽略不計,那麼它可能會優於類型4驅動程序。

類型3驅動程序基本上將請求代理(或中繼)到另一個網絡資源。這通常會帶來額外的網絡衝擊,但同樣,這並沒有說明實際的性能。

4型驅動程序是您可能想要堅持的驅動程序。 Java程序直接連接到數據庫,這意味着如果出現問題,它將被完全捕獲到程序的JVM中進行連接(類型1,它在ODBC層中,類型2在本地編譯代碼中,鍵入3它在遠程網絡代理中)。

再次,沒有一個與功能有關;但是,它們都會影響如何部署,如何調試以及如何配置數據庫連接。

4

ojdbc14.jar:提供JDBC驅動程序,這將幫助您連接到數據庫。

java.sql.*:爲您提供的API,數據庫查詢數據,需要一個數據庫連接做這正是司機的幫助。

所以他們有不同的角色扮演,都需要與數據庫交談。

來到類型的驅動程序,以及其不同的方式,他們與數據庫進行分類它們進行交互,但最終的目標是相同的,即連接到數據庫。

驅動程序的類型在這裏詳細解釋:http://en.wikipedia.org/wiki/JDBC_driver

+2

只是一個側面說明:'ojdbc14.jar'是絕望的過時。它被用於Java 1.4,不應該再使用它。相反,使用適當版本的'ojdbc6.jar'(用於Java6)或'ojdbc7.jar'(用於Java7)。 –

10

「類型」是指駕駛員如何實現API。這四種類型是:

類型1:JDBC-ODBC橋驅動器(橋)

類型2:本地API /部分Java驅動程序(母語)

類型3:AllJava /淨重 - 協議驅動程序(中間件)

類型4:所有的Java /本地協議驅動程序(純)

他們將有不同的性能特徵。看到這個link進行更詳細的審查。

5
+------+---------------------------------+-------------------------------------------------------------------------------------------+ 
| Type |    Driver    |          Descripiton          | 
+------+---------------------------------+-------------------------------------------------------------------------------------------+ 
| 1 | JDBC-ODBC Bridge (bridge)  | Translates all JDBC calls into ODBC calls.            | 
| 2 | Native API (native)    | Translates all JDBC calls into native API database calls. (e.g: DLL on windows using JNI) | 
| 3 | Network Protocol(middleware) | Translates all JDBC calls into database independent middleware specific calls.   | 
| 4 | Native Protocol(pure java thin) | Translates all JDBC calls directly into database calls.         | 
+------+---------------------------------+-------------------------------------------------------------------------------------------+