java - 什么是类型 1、2、3 或 4 的 JDBC 驱动程序?

标签 java sql jdbc

要使用 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/

相关文章:

java - 这个方法中什么导致了 'force close' ?

java - 在oracle数据库中持久化的同时处理并发请求?

java - 如何使用 JAXB 编码多个对象?

MySQL - 行到列

java - 连接到 AS400 DB2 服务器 JDBC 时出错

mysql - 查找拥有作者 X 所写的所有书籍的人名

php - 如何防止 PHP 中的 SQL 注入(inject)?

java - 获取学生详细信息并显示

java - Android Activity 方法使显示屏闪烁白色以发出警告通知

java - 如何检查字符串中是否有相同的单词?