要使用 Java 连接到数据库,我们大多数人都使用 JDBC API。
我们通常ojdbc14
在类路径中包含像(Intended for Java 1.4)这样的驱动程序,并在我们Class.forName
用来使用它的程序中。
与大多数其他 jar 不同,导入不是来自 ojdbc14,它们本身java.sql
就是来自rt.jar
。那么哪种类型的驱动程序(1,2,3,4)用于这些?
您正在使用 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 它在远程网络代理中)。
同样,这一切都与功能无关。但是,它们都会影响如何部署、如何调试以及如何配置数据库连接。
“类型”是指驱动程序如何实现 API。这四种类型是:
类型一:JDBC-ODBC桥驱动(Bridge)
类型 2:Native-API/部分 Java 驱动程序(Native)
类型 3:AllJava/Net-protocol 驱动程序(中间件)
类型 4:所有 Java/Native-protocol 驱动程序(纯)
它们将具有不同的性能特征。有关更详细的评论,请参阅此链接。
+------+---------------------------------+-------------------------------------------------------------------------------------------+
| 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. |
+------+---------------------------------+-------------------------------------------------------------------------------------------+
ojdbc14.jar
: 提供jdbc驱动,帮助你连接DB。
java.sql.*
:为您提供 api 来查询数据库中的数据,并且需要一个数据库连接来执行驱动程序提供帮助的操作。
所以他们有不同的角色要扮演,两者都需要与数据库交谈。
谈到驱动程序的类型,它们与 DB 交互的不同方式对它们进行了分类,但最终目标是相同的,即连接到 DB。
此处详细解释了驱动程序的类型:http ://en.wikipedia.org/wiki/JDBC_driver
简单来说
Type1:(JDBC-ODBC桥驱动)
-> 它使用 ODBC
-> 将 JDBC 调用转换为 ODBC 调用
->它的缺点是你需要安装 ODBC 或者你可以说它依赖于 ODBC(由微软提供)
-> 性能低是因为它将 JDBC 调用转换为 ODBC 调用
Type2(原生 API)
-> 使用数据库的客户端库
-> 将 JDBC 调用转换为数据库 Api 的本机调用
-> 提供比 JDBC-ODBC(Type1) 更好的性能,因为它不依赖或不使用 ODBC
Type3(网络协议)
-> 它使用应用程序服务器(中间件)
->server 将 jdbc 调用转换为供应商特定的数据库协议
->客户端需要网络支持
->网络协议驱动的维护成本很高
Type4(薄)
-> 直接与数据库交互
-> 不需要任何库
->由数据库供应商编写,因此最好使用