2012-04-23 145 views
4

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

退房这个职位,这似乎是一个类似的问题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

+0

有时它也是用户帐户中看到http://stackoverflow.com/a/36793611/808723 – GameScripting 2016-04-22 12:16:42

回答

9

从我的经验

对于用户(?或系统)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 DriverHXTT Driver

Article可能是有用的


编辑2016年1月6日

作为戈德Thompson说; ODBC-Bridge已从Java 8中移除。好消息是UCanAccess正在积极开发之中,并且他们似乎正在稳步前进。

+0

我确认布鲁斯表示,与Java中使用时,对于64位Microsoft Access ODBC驱动程序的问题是什么。这似乎是非常麻烦的,出于某种原因,互联网上关于它的信息很少。列顺序似乎很重要,我也有问题。我切换回32位ODBC驱动程序(这也意味着切换回32位JVM),并且一切正常。 – kaliatech 2012-07-24 03:08:15

0

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

我使用的是JDK版本运行 “的jdk-7u67-Windows的i586.exe”

+0

这并不回答OP在应用程序中明确声明需要64位JVM的问题。 – abiessu 2016-04-21 15:49:19

2

现在,JDBC-ODBC桥已经从Java 8所有的周边访问ODBC将越来越多地成为过去的事情,“真正的” JDBC驱动程序将需要这些问题中删除。

,如前面提到的答案,UCanAccess是一个免费开源的选择。它不使用ODBC可言,所以不论何种平台(Windows,Linux的...)或建筑作品纯Java实现(32位或64位)。

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