【问题标题】:How to connect to a 32-bit Access Database from 64-bit JVM?如何从 64 位 JVM 连接到 32 位 Access 数据库?
【发布时间】:2012-05-04 14:27:28
【问题描述】:

到目前为止,当我必须连接到 32 位 Access 数据库时,我只是使用 32 位 JVM 执行应用程序。但是,我现在正在开发一个需要 64 位 JVM 的应用程序,但我仍然需要连接到 32 位 Access 数据库。当我尝试连接时,我得到了这个异常:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)
at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcConnection.initialize(Unknown Source)
at sun.jdbc.odbc.JdbcOdbcDriver.connect(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)

这是我的代码:

String s = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=" + path;
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection(s, user, password);

【问题讨论】:

标签: java ms-access 32bit-64bit jdbc-odbc


【解决方案1】:

根据我的经验

对于用户(或系统?)ODBC DSN,有单独的 32 位和 64 位定义。我想你可能有 32 位 定义,但 Java ODBC-Bridge 正在寻找 64 位定义。不能直接连接 来自 64 位程序的 32 位 Access ODBC 驱动程序(如果您尝试,则会收到错误提示)。

虽然 Microsoft 随 Windows(32 位和 64 位)一起分发 32 位 ODBC Microsoft Access 驱动程序,但它不 使用 Windows 64 分发 64 位 MsAccess 驱动程序。有一个 64 bit Access ODBC Driver 可从 Microsoft 获得。下载和安装 64 位 MsAccess 驱动程序存在一些问题

  • Java / 驱动程序仅在我使用 Java 6(64 位)测试时间歇性地工作; 我还没有用 Java 7 测试过它。 使用 java 6,如果 String 字段位于 SQL 选择语句的末尾,我认为您可能没问题。 我发现有些 SQL 语句有效,有些则无效。
  • 使用 32 位驱动程序,您可以准确地知道驱动程序的位置, 64位驱动你不知道它会安装在哪里。这使得自动安装 脚本难以编写。
  • 您还需要创建单独的 64 位 ODBC 定义。

    ================================================

另一方面,可以运行一些在 32 位 java 中运行的数据库代理/池包 (并通过 TCP/IP 连接?)。不过我没试过。

Java 64 -->> 运行 32 位 Java DB 的 DB 代理 -->> Ms Access

数据库代理列表:http://www.manageability.org/blog/stuff/jdbc-proxy-drivers

类似 SSL-SQL-Proxy Server 的东西可能会起作用

祝你好运,希望有人可以为您提供解决方案


由于原来的答案,有2个JDBC驱动

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

商业: http://www.csv-jdbc.com/stels_mdb_jdbc.htm

我也没试过


编辑:2014 年 5 月 8 日

看起来更像是商业驱动 Easysoft DriverHXTT Driver

这个Article 可能有用


2016 年 1 月 6 日编辑

正如戈德·汤普森所说; ODBC-Bridge 已从 Java 8 中删除。好消息是 UCanAccess 正在积极开发中,而且它们似乎正在稳步推进。

【讨论】:

  • 我正在确认 Bruce 所说的关于 64 位 Microsoft Access ODBC 驱动程序与 Java 一起使用时的问题。它似乎非常有问题,并且由于某种原因,互联网上关于它的信息很少。我也遇到了列顺序似乎很重要的问题。我切换回 32 位 ODBC 驱动程序(这也意味着切换回 32 位 JVM),一切正常。
【解决方案2】:

问题是你应该在 Java 32 位上运行尝试安装最新的 JDK,它会工作

我使用JDK版本运行它“jdk-7u67-windows-i586.exe”

【讨论】:

  • 这没有回答问题,其中 OP 明确指出应用程序需要 64 位 JVM。
【解决方案3】:

现在 JDBC-ODBC 桥已从 Java 8 中删除,所有这些与 Access ODBC 相关的问题都将逐渐成为过去,并且需要一个“真正的”JDBC 驱动程序。

正如前面的回答中提到的,UCanAccess 是一个免费的开源选项。它是一个完全不使用 ODBC 的纯 Java 实现,因此无论平台(Windows、Linux 等)或体系结构(32 位或 64 位)如何,它都可以工作。

有关使用 UCanAccess 的更多信息,请参阅相关问题here

【讨论】:

    猜你喜欢
    • 2015-05-06
    • 2016-09-05
    • 1970-01-01
    • 2013-10-20
    • 2013-09-13
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多