如何从64位JVM连接到32位Access数据库?
到目前为止,当我不得不连接到32位Access数据库时,我只是使用32位JVM执行应用程序。 但是,我现在正在开发一个需要64位JVM的应用程序,但我仍然需要连接到32位Access数据库。 当我尝试连接时,我得到以下exception:
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位Access ODBC驱动程序(如果您尝试,则会收到错误信息)。
虽然Microsoft使用Windows(32位和64位)分发32位ODBC Microsoft Access驱动程序,但它不会使用Windows 64分发64位MsAccess驱动程序 .Microsoft提供了64位Access ODBC驱动程序 。 下载和安装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 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 Driver和HXTT Driver
本文可能有用
编辑2016年1月6日
正如戈德汤普森所说; ODBC-Bridge已从Java 8中删除。好消息是UCanAccess正在积极开发,它们似乎正在取得稳步进展。
现在已经从Java 8中删除了JDBC-ODBC Bridge,围绕Access ODBC的所有这些问题将日益成为过去,并且将需要“真正的”JDBC驱动程序。
正如之前的回答中所提到的, UCanAccess是一个免费的开源选项。 它是一个完全不使用ODBC的纯Java实现,因此无论平台(Windows,Linux,…)还是体系结构(32位或64位)都可以使用它。
有关使用UCanAccess的更多信息,请参阅此处的相关问题。
问题是你应该运行Java 32位尝试安装最新的JDK,它会工作
我使用JDK版本“jdk-7u67-windows-i586.exe”运行它