2013-07-15 39 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.         | 
+------+---------------------------------+-------------------------------------------------------------------------------------------+