36

从 Java 8 开始,JDBC-ODBC 桥将不再包含在 JDK 中。

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // classNotFoundException is thrown

有没有其他连接 JDBC-ODBC 桥的解决方案?

4

5 回答 5

30

我们仍然可以在 java 8 中使用 JDBC-ODBC 桥,只需遵循这个简单的方法:

  1. 下载 JDK 7 或 JRE 7。
  2. 转到 JRE\lib 文件夹并找到 rt.jar
  3. 解压缩它(如果您安装了 WinRAR 或 7zip),或者您可以将其重命名为 rt.zip 并解压缩。
  4. 将 sun\jdbc 和 sun\security\action 文件夹复制出来,保留文件夹结构。即,您应该具有如下文件夹结构:

    Sun --> Security --> Action
        --> JDBC
    
  5. 打开一个 CMD 窗口。转到 Sun 文件夹的父文件夹。运行命令:jar -cvf jdbc.jar sun

  6. 上面的命令将创建一个名为 jdbc.jar 的文件
  7. 将 JDBC.jar 复制到您的 JDK8 或 JRE8lib文件夹。如果这不起作用,请尝试该lib\ext文件夹。
  8. 将 jdbcodbc.dll 从 JRE 7 安装的 JRE\bin 复制到 JRE 8 安装的 JRE\bin。
  9. 重新启动您的 JVM。

如何为 JDK 8 启用 JDBC-ODBC 桥接器

于 2016-04-26T20:22:38.507 回答
15

好吧,在我看来,Oracle 员工的这篇博文说明了一切:

我建议您使用数据库供应商提供的 JDBC 驱动程序或商业 JDBC 驱动程序,而不是 JDBC-ODBC 桥。

您将 JDBC-ODBC 桥用于哪种应用程序?

  • 如果是生产代码,恕我直言,您应该尽快用真正的驱动程序替换桥,并用真正的驱动程序替换旧数据库
  • 如果测试代码与 Access DB、Excel 电子表格或您可以通过 ODBC 访问的任何内容交互,请尝试将其替换为纯 Java 数据库,如 H2
  • 如果您出于开发和/或分析目的使用它来临时访问遗留的 Access DB,并且真的不能或不想更新任何东西,您可以坚持使用 JDK 7 很长一段时间直到其生命周期结束日期,并且可能远不止于此
于 2013-01-13T10:37:11.867 回答
12

有没有其他连接 JDBC-ODBC 桥的解决方案?

Sun 和 Oracle 的官方立场长期以来一直是——

[JVM-bundled] JDBC-ODBC 桥应该被认为是一种过渡解决方案 [...] Oracle 不支持 JDBC-ODBC 桥。

但是,我的雇主OpenLink Software从 JVM 1.0 开始就在 JDBC 和 ODBC 之间开发了企业级商业 Type 1 Bridges,并且这些桥接器与当前的 JVM 1.8 完全兼容。你可以在这里了解更多——

于 2015-04-07T21:18:09.897 回答
10

我找到了一个合理的解决方案,它允许使用现有代码并仅更改打开数据库连接逻辑。

UCanAccess 是一个开源的 JDBC 驱动程序。

http://ucanaccess.sourceforge.net/site.html

这有两个依赖项,其中一个还有两个依赖项。

jackcess-2.0.0.jar 或更高版本

commons-lang-2.4.jar

commons-logging-1.0.4.jar

hsqldb.jar(2.2.5)

这些都是开源的。如有必要,进行互联网搜索、下载、解压缩,并将所有四个 jar 以及用于 UCanAccess 的一个放入项目的目录中(例如 JDBC-to-MSAccess)。如果使用 Ecplise,请从菜单“Project / Properties / Java Compiler / Libraries / Add External JARs”中选择添加到您的构建路径,然后选择所有五个 jar 文件。

连接逻辑非常简单:


String strConnectionString = "";
Connection conAdministrator = null;

// Register driver
Class.forName( "net.ucanaccess.jdbc.UcanaccessDriver" );

// System.getProperty( "user.dir" ) => Current working directory from where application was started

strConnectionString = "jdbc:ucanaccess://" + System.getProperty( "user.dir" )  + "\\Your-database-name.<mdb or accdb>";

// Open a connection to the database
conAdministrator = DriverManager.getConnection( strConnectionString );
于 2014-07-01T02:06:10.030 回答
1

Robert Petermeier 给出了一个很好的观点 H2 驱动器通过 PostgreSQL 驱动程序支持 ODBC,您可以相应地安装驱动程序,来自 Stackoverflow 的链接在 Windows 上设置 PostgreSQL ODBC

于 2014-03-24T03:31:04.907 回答