4

到目前为止,当我必须连接到 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);
4

3 回答 3

9

根据我的经验

对于用户(或系统?)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 驱动程序。Microsoft 提供了64 位 Access ODBC 驱动程序 。下载和安装 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

这篇文章可能有用


编辑 2016 年 1 月 6 日

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

于 2012-04-24T00:34:29.310 回答
2

既然 JDBC-ODBC 桥已从 Java 8 中删除,所有这些围绕 Access ODBC 的问题将越来越成为过去,并且将需要一个“真正的”JDBC 驱动程序。

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

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

于 2014-09-02T10:55:37.177 回答
-1

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

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

于 2014-09-02T09:04:56.600 回答