如何从 64 位 JVM 连接到 32 位访问数据库



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

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

根据我的经验

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

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

    Java
  • /驱动程序仅在我使用 Java 6(64 位)测试时间歇性地工作;我还没有用Java 7测试过它。对于java 6,我认为如果字符串字段位于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驱动程序和HXTT驱动程序

本文可能有用


编辑 6 Jan 2016

正如 Gord Thompson 所说,ODBC-Bridge 已从 Java 8 中删除。好消息是UCanAccess正在积极开发,他们似乎正在取得稳步进展。

现在 JDBC-ODBC 桥已经从 Java 8 中删除,所有这些围绕 Access ODBC 的问题将日益成为过去,并且需要一个"真正的"JDBC 驱动程序。

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

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

问题是您应该在Java 32位上运行 尝试安装最新的JDK,它将起作用

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

最新更新