如何从64位JVM连接到32位Access数据库?
到目前为止,当我不得不连接到32位Access数据库时,我只是使用32位JVM执行应用程序。但是,我正在开发一个需要64位JVM的应用程序,但我仍然需要连接到32位Access数据库。当我尝试连接,我得到这个异常:如何从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);
从我的经验
对于用户(?或系统)ODBC DSN的有独立32位和64位定义。我想你可能有32位的定义,但是Java ODBC-Bridge正在寻找64位的定义。您不能直接连接到 64位程序的32位访问ODBC驱动程序(如果您尝试,您会收到错误消息)。
虽然微软分发与Windows 32个ODBC Microsoft Access中驱动程序(32 & 64位),它不 分发64个与Windows 64位驱动程序MSACCESS有一个一个64 bit Access ODBC Driver 可从Microsoft。有一些问题,下载并安装64位驱动程序MSACCESS
- ,当我与Java 6(64位)进行了测试中的java /驱动器只工作间歇性; 我还没有用Java 7测试过。 对于java 6,我认为如果字符串字段在SQL select语句结尾处,您可能会确定。 我发现一些SQL语句的工作有些没有。
- 与32位驱动程序,你确切知道驱动程序所在的位置,与 64位驱动程序,你不知道它将被安装在哪里。这使得自动化安装 脚本很难写。
-
您还需要创建单独的64位ODBC定义。
============================================== =
在一个不同的音符,它可能会运行一些数据库代理/池包在32比特的java 运行(并且通过TCP/IP连接?)。我从来没有尝试过。
Java的64 - >> DB代理运行32位Java DB - >>微软的Access
数据库代理列表:http://www.manageability.org/blog/stuff/jdbc-proxy-drivers
像SSL-SQL代理服务器可能工作
祝你好运,希望有人能为你提供一个解决方案
由于原来的答案,有2 JDBC驱动程序的
开源:http://ucanaccess.sourceforge.net/site.html
商业:http://www.csv-jdbc.com/stels_mdb_jdbc.htm
我还没有尝试过任何
编辑:2014年5月8日
看起来是更加商业化的驱动程序Easysoft Driver和HXTT Driver
这Article可能是有用的
编辑2016年1月6日
作为戈德Thompson说; ODBC-Bridge已从Java 8中移除。好消息是UCanAccess正在积极开发之中,并且他们似乎正在稳步前进。
我确认布鲁斯表示,与Java中使用时,对于64位Microsoft Access ODBC驱动程序的问题是什么。这似乎是非常麻烦的,出于某种原因,互联网上关于它的信息很少。列顺序似乎很重要,我也有问题。我切换回32位ODBC驱动程序(这也意味着切换回32位JVM),并且一切正常。 – kaliatech 2012-07-24 03:08:15
的问题是,你应该对Java运行32位尝试安装最新的JDK,它会工作
我使用的是JDK版本运行 “的jdk-7u67-Windows的i586.exe”
这并不回答OP在应用程序中明确声明需要64位JVM的问题。 – abiessu 2016-04-21 15:49:19
现在,JDBC-ODBC桥已经从Java 8所有的周边访问ODBC将越来越多地成为过去的事情,“真正的” JDBC驱动程序将需要这些问题中删除。
,如前面提到的答案,UCanAccess是一个免费开源的选择。它不使用ODBC可言,所以不论何种平台(Windows,Linux的...)或建筑作品纯Java实现(32位或64位)。
有关使用UCanAccess的更多信息,请参阅相关的问题here。
退房这个职位,这似乎是一个类似的问题http://stackoverflow.com/questions/3454701/32-bit-text-drivers-microsoft-access-microsoft-excel-and-text-files-from-一个。具体而言,请查看有关从Microsoft安装64位MS Access Redistributable Pack的最后一个答案。 – mazaneicha 2012-04-24 00:32:25
有时它也是用户帐户中看到http://stackoverflow.com/a/36793611/808723 – GameScripting 2016-04-22 12:16:42