Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从64位JVM连接到32位Access数据库?_Java_Ms Access_32bit 64bit_Jdbc Odbc - Fatal编程技术网

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

Java 如何从64位JVM连接到32位Access数据库?,java,ms-access,32bit-64bit,jdbc-odbc,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.

到目前为止,当我必须连接到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);
根据我的经验

对于用户(或系统?)ODBC DSN,有单独的32位和64位定义。我想你可能有32位 定义,但JavaODBCBridge正在寻找64位定义。您不能直接连接到 来自64位程序的32位访问ODBC驱动程序(如果尝试,会出现这样的错误)

虽然Microsoft将32位ODBC Microsoft Access驱动程序与Windows(32和64位)一起分发,但它没有 使用Windows 64分发64位MsAccess驱动程序。有一个 可从Microsoft获得。下载和安装64位MsAccess驱动程序时存在一些问题

  • 当我用Java6(64位)测试Java/驱动程序时,它只是间歇性地工作; 我没有用Java7测试它。 在Java6中,我认为如果字符串字段位于SQL select语句的末尾,那么您就可以了。 我发现有些SQL语句有效,有些则无效
  • 使用32位驱动程序,您可以准确地知道驱动程序的位置,并且 64位驱动程序您不知道它将安装在哪里。这使得自动安装成为可能 剧本很难写
  • 您还需要创建单独的64位ODBC定义

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

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

Java 64-->DB代理运行32位Java DB-->Ms访问

数据库代理列表:

类似SSL SQL代理服务器的东西可能会起作用

祝你好运,希望有人能为你提供解决方案


从最初的答案来看,有2个JDBC驱动程序

开源:

商业版:

我也没有试过


编辑:2014年5月8日

看起来是更多的商业司机和司机

这可能有用


2016年1月6日编辑


正如戈德·汤普森所说;ODBC桥已从Java 8中删除。好消息是,他们正在积极开发,而且似乎正在稳步发展。

问题是,您应该在Java 32位上运行,并尝试安装最新的JDK,它会工作的


我使用JDK版本运行它“JDK-7u67-windows-i586.exe”

现在,JDBC-ODBC桥已经从Java 8中删除了,围绕Access ODBC的所有这些问题将逐渐成为过去,需要一个“真正的”JDBC驱动程序

正如前面的回答中提到的,这是一个免费的开源选项。它是一个完全不使用ODBC的纯Java实现,因此无论平台(Windows、Linux等)或体系结构(32位或64位),它都可以工作


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

查看此帖子,这似乎是一个类似的问题。具体来说,请看最后一个关于从Microsoft安装64位MS Access可再发行包的答案。有时也是用户帐户。请看我正在确认Bruce关于64位Microsoft Access ODBC驱动程序在与Java一起使用时的问题所说的话。它似乎是非常有缺陷的,并且出于某种原因,在互联网上几乎没有关于它的信息。我也遇到了列顺序似乎很重要的问题。我切换回32位ODBC驱动程序(这也意味着切换回32位JVM),一切都恢复正常。这并没有回答问题,OP明确指出应用程序中需要64位JVM。