到目前为止,当我必须连接到 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"运行它