java - 关于 JDBC 驱动程序

标签 java jakarta-ee jdbc

我在一本书中读到了有关使用 JDBC API 的驱动程序。解释不清楚。我想知道下面的代码使用什么类型的驱动程序。是类型 4 驱动程序(由数据库供应商提供的 java 驱动程序)。有人提到,类型 4 驱动程序不需要在客户端应用程序中安装任何内容。但我们仍然需要类文件 com.mysql.jdbc.Driver 才能使代码正常工作。不确定这里的意思是什么。

此外,还提到类型 2 驱动器使用数据库供应商提供的驱动程序的二进制代码,并且需要将其安装在客户端中。它与下面的示例有何不同。如果可以粘贴示例代码来访问类型 2 驱动程序,将会很有帮助。

Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/coffeebreak";
conn = DriverManager.getConnection(url, "username", "password");
doTests();
conn.close();

最佳答案

当您在类型 4 JDBC 驱动程序中看到“无需安装任何内容”这一短语时(尤其是在旧文档中),它指的是除了驱动程序 jar 本身之外,客户端计算机上不需要安装任何内容。无论如何,您都需要驱动程序 jar,但对于其他类型:

  • 类型 1:需要在客户端系统上安装 ODBC 和 ODBC 驱动程序
  • 类型 2:需要在客户端系统上安装 native 数据库驱动程序
  • 类型3:客户端系统和数据库之间需要安装协议(protocol)代理服务器

例如,Oracle 类型 2 驱动程序(除了 jdbc jar 本身)需要在运行 java 代码的计算机上安装完整的 Oracle 客户端。

一些注意事项:

  • 从 java 6 (IIRC) 开始,使用现代 jdbc 驱动程序,您不再需要 Class.forName 语句。较新的 JDBC 驱动程序现在会自动注册。

  • 仅通过查看使用它的代码无法判断(这就是重点),但 mysql jdbc 驱动程序是类型 4 驱动程序。

  • 由于您无法通过使用驱动程序来区分差异,因此使用类型 2 驱动程序的示例代码与您在问题中提供的代码相同。

  • 所有类型的 jdbc 驱动程序(类型 1 除外,因为只有 1 个实例)均由供应商提供驱动程序。类型指的是驱动程序连接数据库的方式,而不是由谁提供的。

  • 如今,2 类驱动程序非常罕见,而且在我看来,根本没有人真正使用 1 类或 3 类驱动程序。

  • 现在,几乎所有现代的、适合生产的 jdbc 驱动程序都是类型 4。(我知道 Oracle 提供了类型 2 和类型 4 驱动程序,但这是我能想到的唯一一个,而且两个驱动程序具有相同的功能。)请使用类型 4,除非数据库供应商提供了一些高度具体的建议。

此外,您引用的语言听起来相当过时。 JDBC 的基础知识已经有一段时间没有发生显着变化,但即便如此,您可能仍想查看一本较新的书。

关于java - 关于 JDBC 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9575367/

相关文章:

java - 如何增加线程超时以允许长时间运行的线程在 z/os 的 websphere 上完成而不会异常结束

java - 执行准备好的语句时出现 NullPointer 异常

java - LocalContainerEntityManagerFactoryBean 无法转换为 EntityManagerFactory

java - 我会只使用 do while 循环吗?

java - 未注入(inject) Arquillian 的显式本地 EJB

java - 使用JAVA在mysql中动态输出SHOW PROCESSLIST

java - 检测 UPDATE 语句中哪些 SQL 列发生了更改

java - 获取给定字母表的所有 4 个字符组合

java - Apache FileUtils.isSymlink 和 Java7 的 Files.isSymbolicLink() 之间是否存在已知差异?

java - 如何使用 CriteriaBuilder 设置此 SQL 查询?