要使用Java連接到數據庫,我們大多數人都使用JDBC API。什麼是JDBC驅動程序的1,2,3或4類型?
我們通常在類路徑中包含像ojdbc14
(針對Java 1.4)的驅動程序,在程序中我們使用Class.forName
來使用它。
與大多數其他罐子不同,這些進口不是來自ojdbc14,而是來自java.sql
,它本身就是rt.jar
。那麼,哪種類型的驅動程序(1,2,3,4)用於這些驅動程序?
要使用Java連接到數據庫,我們大多數人都使用JDBC API。什麼是JDBC驅動程序的1,2,3或4類型?
我們通常在類路徑中包含像ojdbc14
(針對Java 1.4)的驅動程序,在程序中我們使用Class.forName
來使用它。
與大多數其他罐子不同,這些進口不是來自ojdbc14,而是來自java.sql
,它本身就是rt.jar
。那麼,哪種類型的驅動程序(1,2,3,4)用於這些驅動程序?
您使用的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它在遠程網絡代理中)。
再次,沒有一個與功能有關;但是,它們都會影響如何部署,如何調試以及如何配置數據庫連接。
ojdbc14.jar
:提供JDBC驅動程序,這將幫助您連接到數據庫。
java.sql.*
:爲您提供的API,數據庫查詢數據,需要一個數據庫連接做這正是司機的幫助。
所以他們有不同的角色扮演,都需要與數據庫交談。
來到類型的驅動程序,以及其不同的方式,他們與數據庫進行分類它們進行交互,但最終的目標是相同的,即連接到數據庫。
驅動程序的類型在這裏詳細解釋:http://en.wikipedia.org/wiki/JDBC_driver
只是一個側面說明:'ojdbc14.jar'是絕望的過時。它被用於Java 1.4,不應該再使用它。相反,使用適當版本的'ojdbc6.jar'(用於Java6)或'ojdbc7.jar'(用於Java7)。 –
「類型」是指駕駛員如何實現API。這四種類型是:
類型1:JDBC-ODBC橋驅動器(橋)
類型2:本地API /部分Java驅動程序(母語)
類型3:AllJava /淨重 - 協議驅動程序(中間件)
類型4:所有的Java /本地協議驅動程序(純)
他們將有不同的性能特徵。看到這個link進行更詳細的審查。
+------+---------------------------------+-------------------------------------------------------------------------------------------+
| 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. |
+------+---------------------------------+-------------------------------------------------------------------------------------------+
這裏是[鏈接](http://docs.oracle.com/cd/E19509-01/820-5069/6ngg83nak/index.html)甲骨文的文件,除了偉大的答案的問題。 –