【问题标题】:Removal of JDBC ODBC bridge in java 8在 java 8 中删除 JDBC ODBC 桥
【发布时间】:2013-01-09 05:55:59
【问题描述】:

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

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

还有其他连接JDBC-ODBC Bridge的解决方案吗?

【问题讨论】:

  • 有人能帮帮我吗?
  • 您可以随时从 JDK 7 中提取驱动程序。
  • @RickyMutschlechner 为什么选择 EasySoft?它们似乎价格过高......
  • @BAR 只是我从谷歌上找到的一个随机建议,哈哈

标签: java jdbc-odbc java-8


【解决方案1】:

我们仍然可以在 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 或 JRE8 lib 文件夹。如果这不起作用,请尝试使用 lib\ext 文件夹。
  8. 将 jdbcodbc.dll 从 JRE 7 安装的 JRE\bin 复制到 JRE 8 安装的 JRE\bin。
  9. 重新启动 JVM。

How to enable JDBC-ODBC bridge for JDK 8

【讨论】:

  • 支持这个解决方案,因为它对我来说没问题。但是请注意,您必须复制到 \lib\ext 文件夹,注意不要将 32 位版本复制到 64 位版本,反之亦然。
  • 嗨,坦率地说,@runholen,你们能帮我解决同样的问题吗,这是我的问题stackoverflow.com/questions/38616703/…
  • 您好 user2423959。尝试从我的谷歌驱动器下载文件,drive.google.com/… 确保两者都在类路径中。 (包含的文件适用于 64 位 odbc btw)
  • 对于第 1 步,另一种方法是仅解压缩所需的内容,而不是下载并运行安装。 windows exe可以用7zip打开,使用unpack200可以拉出rt.jar。你也可以拉出dll。 brucalipto.org/java/…
  • 对于第 7 步,如果 JRE8 lib 文件夹不起作用,请尝试 JRE8 lib\ext 文件夹。将它放在 lib 文件夹中对我不起作用,但 'lib\ext` 可以。我尝试将此添加到答案中,但被拒绝了。其他有更多juju的人应该将其添加到答案中。
【解决方案2】:

嗯,我认为this blog entry by an Oracle employee 说明了一切:

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

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

  • 如果是生产代码,恕我直言,您应该尽快用真正的驱动程序替换网桥,并用真正的驱动程序替换旧数据库
  • 如果是与 Access DB、Excel 电子表格或您可以通过 ODBC 访问的任何内容交互的测试代码,请尝试将其替换为纯 Java 数据库(如 H2)
  • 如果您出于开发和/或分析目的而使用它来临时访问旧版 Access DB,并且确实不能或不想更新任何内容,那么您可以坚持使用 JDK 7距离其生命周期结束日期还有很长一段时间,而且可能远远超过这个日期

【讨论】:

  • 作为对这个答案的补充,我想指出您可以使用Apache POI 来阅读 Excel 电子表格和 Jackcess 来阅读 Access 数据库。两者都比 ODBC 多一点工作。
  • 一位 Oracle 员工建议更改您的企业数据库,因为缺乏持续的驱动程序支持。经典。
  • @BAR:哪个“企业”数据库没有合适的 JDBC 驱动程序?
  • @a_horse_with_no_name 这正是我的观点。任何真正的企业数据库都会有 JDBC
  • 用旧的 JDBC 驱动程序替换 ODBC 驱动程序并不总是最好的解决方案,例如:当使用 Sybase IQ 时,ODBC 驱动程序的工作速度比用于 OLAP 的 JDBC 驱动程序快 500%。只是我的经验。
【解决方案3】:

还有其他连接JDBC-ODBC Bridge的解决方案吗?

Sun 和 Oracle 的 official positions 长期以来一直是 --

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

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

【讨论】:

  • 投票选出好的答案。您能否指出有关此 Bridge 驱动程序的许可协议?
  • @YazadKhambata - 我不确定你在找什么。可能是this?你也可以了解更多here
  • 这就是我想要的。谢谢。
【解决方案4】:

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

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 );

【讨论】:

  • 帮助想要连接到 Access 数据库的用户的好建议(更多详细信息here)。但是,这不是通用的 ODBC 解决方案。
【解决方案5】:

Robert Petermeier 指出 H2 驱动器通过 PostgreSQL 驱动程序支持 ODBC,您可以相应地安装驱动程序,链接来自 Stackoverflow Setting up PostgreSQL ODBC on Windows

【讨论】:

  • 我要感谢 Robert Petermeier 的精彩回答,因为我在 1 小时内迁移到 H2。不幸的是,由于声誉低,我无法提高他的回答率,但仍然可以说谢谢。
猜你喜欢
  • 2015-08-03
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多