20

要使用 Java 连接到数据库,我们大多数人都使用 JDBC API。

我们通常ojdbc14在类路径中包含像(Intended for Java 1.4)这样的驱动程序,并在我们Class.forName用来使用它的程序中。

与大多数其他 jar 不同,导入不是来自 ojdbc14,它们本身java.sql就是来自rt.jar。那么哪种类型的驱动程序(1,2,3,4)用于这些?

4

5 回答 5

17

您正在使用 java.sql 类中的 jdbc 接口,因此驱动程序的类型不会对您的代码产生任何逻辑影响,它只会对运行时/部署产生影响。

您还使用了 Oracle 的 ojdb14.jar,可能带有“精简”jdbc 配置,这意味着您使用的是 type-4 驱动程序配置。通过这样的配置,您只需将 JDBC jar 文件与您的数据库访问程序一起部署。

其他选项包括 JDBC 桥接器,这实际上意味着包装在 JDBC 服装中的 ODBC 连接。这意味着您必须为系统配置正确的 ODBC 功能,然后使用 JAR 文件来访问 ODBC。由于通过 ODBC 数据的额外“跳跃”,人们会认为它比类型 4 访问要慢一些;但是,对于特定情况,ODBC 有可能在很大程度上进行了优化,以至于额外的跃点可以忽略不计。与大多数性能问题一样,事实是通过测试(在您的环境中)发现的。

类型 2 驱动程序再次使用 Java (JDBC) API;但是,它们将调用桥接到 C 或 C++ 风格的共享库中,然后由该库处理真正的连接。如果驱动程序被优化得如此之快以至于 JNI 设置/拆除调用的成本可以忽略不计,那么它可能会优于 type-4 驱动程序。

类型 3 驱动程序基本上将请求代理(或中继)到另一个网络资源。这通常会导致额外的网络攻击,但同样,这并不能说明实际性能。

类型 4 驱动程序是您可能想要坚持使用的驱动程序。Java 程序直接连接到数据库,这意味着如果出现问题,它将完全在建立连接的程序的 JVM 中捕获(类型 1,它在 ODBC 层中,类型 2 它在本机编译代码中,类型 3 它在远程网络代理中)。

同样,这一切都与功能无关。但是,它们都会影响如何部署、如何调试以及如何配置数据库连接。

于 2013-07-15T16:33:05.160 回答
13

“类型”是指驱动程序如何实现 API。这四种类型是:

类型一:JDBC-ODBC桥驱动(Bridge)

类型 2:Native-API/部分 Java 驱动程序(Native)

类型 3:AllJava/Net-protocol 驱动程序(中间件)

类型 4:所有 Java/Native-protocol 驱动程序(纯)

它们将具有不同的性能特征。有关更详细的评论,请参阅此链接。

于 2013-07-15T16:15:19.003 回答
7
+------+---------------------------------+-------------------------------------------------------------------------------------------+
| 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.                                   |
+------+---------------------------------+-------------------------------------------------------------------------------------------+
于 2016-01-18T03:07:06.270 回答
5

ojdbc14.jar: 提供jdbc驱动,帮助你连接DB。

java.sql.*:为您提供 api 来查询数据库中的数据,并且需要一个数据库连接来执行驱动程序提供帮助的操作。

所以他们有不同的角色要扮演,两者都需要与数据库交谈。

谈到驱动程序的类型,它们与 DB 交互的不同方式对它们进行了分类,但最终目标是相同的,即连接到 DB。

此处详细解释了驱动程序的类型:http ://en.wikipedia.org/wiki/JDBC_driver

于 2013-07-15T16:10:22.233 回答
0

简单来说

Type1:(JDBC-ODBC桥驱动)

-> 它使用 ODBC

-> 将 JDBC 调用转换为 ODBC 调用

->它的缺点是你需要安装 ODBC 或者你可以说它依赖于 ODBC(由微软提供)

-> 性能低是因为它将 JDBC 调用转换为 ODBC 调用

Type2(原生 API)

-> 使用数据库的客户端库

-> 将 JDBC 调用转换为数据库 Api 的本机调用

-> 提供比 JDBC-ODBC(Type1) 更好的性能,因为它不依赖或不使用 ODBC

Type3(网络协议)

-> 它使用应用程序服务器(中间件)

->server 将 jdbc 调用转换为供应商特定的数据库协议

->客户端需要网络支持

->网络协议驱动的维护成本很高

Type4(薄)

-> 直接与数据库交互

-> 不需要任何库

->由数据库供应商编写,因此最好使用

于 2018-12-20T12:12:41.750 回答