如何从64位JVM连接到32位Access数据库?

时间:2012-04-23 23:23:37

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

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

3 个答案:

答案 0 :(得分: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驱动程序。有一个64 bit Access ODBC Driver 可从Microsoft获得。下载和安装64位MsAccess驱动程序存在一些问题

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

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

另一方面,可能运行一个在32位java中运行的数据库代理/池化包 (并通过TCP / IP连接?)。我从未尝试过。

Java 64 - >> DB Proxy运行32位Java DB - >> Ms Ms

数据库代理列表: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正在积极开发,它们似乎正在取得稳步进展。

答案 1 :(得分:2)

现在已经从Java 8中删除了JDBC-ODBC Bridge,围绕Access ODBC的所有这些问题将越来越成为过去和现实中的问题。将需要JDBC驱动程序。

如前面的回答所述,UCanAccess是一个免费的开源选项。它是一个完全不使用ODBC的纯Java实现,因此无论平台(Windows,Linux,...)还是架构(32位或64位)都可以使用它。

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

答案 2 :(得分:-1)

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

我使用JDK版“jdk-7u67-windows-i586.exe”

运行它