要使用 Java 连接到数据库,我们大多数人都使用 JDBC API。
我们通常在类路径中包含像 ojdbc14
(Intended for Java 1.4) 这样的驱动程序,在程序中我们使用 Class.forName
来使用它。
与大多数其他 jar 不同,导入不是来自 ojdbc14,它们来自 java.sql
,它位于 rt.jar
本身中。那么哪种类型的驱动程序(1,2,3,4)用于这些?
最佳答案
您正在使用 java.sql 类中的 jdbc 接口(interface),因此驱动程序的类型不会对您的代码产生任何逻辑影响,它只会影响运行时/部署。
您还使用了 Oracle 的 ojdb14.jar,可能带有“精简”jdbc 配置,这意味着您使用的是 type-4 驱动程序配置。有了这样的配置,您只需将 JDBC jar 文件与您的数据库访问程序一起部署即可。
其他选项包括 JDBC 桥,这实际上意味着 ODBC 连接包裹在 JDBC 服装中。这意味着您必须为系统配置正确的 ODBC 功能,然后使用 JAR 文件来访问 ODBC。由于通过 ODBC 数据的额外“跳跃”,人们会认为它比类型 4 访问要慢一些;但是,对于特定情况,ODBC 有可能在很大程度上进行了优化,以至于额外的跃点可以忽略不计。与大多数性能问题一样,真相是通过测试(在您的环境中)发现的。
type-2 驱动程序再次使用 Java (JDBC) API;但是,它们将调用桥接到 C 或 C++ 风格的共享库中,然后由该库处理真正的连接。如果驱动程序被优化得如此之快,以至于 JNI 设置/拆除调用的成本可以忽略不计,那么它可能会胜过 type-4 驱动程序。
类型 3 驱动程序基本上将请求代理(或中继)到另一个网络资源。这通常会导致额外的网络攻击,但同样,这并不能说明实际性能。
Type 4 驱动程序是您可能想要坚持使用的驱动程序。 Java 程序直接连接到数据库,这意味着如果出现问题,它将完全在建立连接的程序的 JVM 中捕获(类型 1,它在 ODBC 层,类型 2 它在 native 编译代码中,类型 3 它在远程网络代理中)。
同样,这些都与功能无关;但是,它们都会影响如何部署、如何调试以及如何配置数据库连接。
关于java - 什么是类型 1、2、3 或 4 的 JDBC 驱动程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17658727/