如何在Windows 2008上使用Access数据库的64位Java ODBC驱动程序?

问题描述:

多年来,在32位系统上,我从来没有遇到过问题。为什么我无法在Windows Server 2008上使用Access数据库的64位Java ODBC驱动程序? 64位系统上的ODBC驱动程序是用32位代码写的吗?下面是一个使用64位JDK1.6.018错误我看到:如何在Windows 2008上使用Access数据库的64位Java ODBC驱动程序?

java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application 
     at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) 
     at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) 
     at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073) 
     at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) 
     at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:185) 
     ..... 

我怀疑访问驱动程序是32位的,因为它没有为Windows 64位ODBC控制面板显示。 ODBC控制面板的“驱动程序”选项卡中仅显示两个64位驱动程序(用于SQL Server)。

那么,我该怎么办?我宁愿不必使用SQL Server和JDBC Type-4驱动程序(但那将是我的最后手段)。

Office 2010中的Microsoft Access将具有64位版本。早期版本的Microsoft Office只有32位。

使用SQLExpress既便于使用又易于使用,Access和Java可以连接到它,所以它看起来是一个不错的选择。

既然你说,这是最后的手段,另一种选择是运行32位的JDK,它应该运行服务器上的微细2008

+0

我相信在64位机器上运行32位JDK时出现问题。我怀疑它与JVM如何使用.dll来处理内存(RAM)管理有关。我遇到了麻烦,当我尝试时,这就是为什么即时通讯使用64位jdk。 – djangofan 2010-03-04 23:55:24

+0

@djangofan,限制将在JVM可以使用多少内存。当然,如果有微妙的问题,我不一定知道。 – Yishai 2010-03-05 00:11:23

+0

是的,可能是真的。我认为你也是这么想的,起初... – djangofan 2010-03-05 00:46:32

您是否尝试过推出32位ODBC管理器从Windows 2008 - 看看这是否有助于您诊断问题?

的odbcad32.exe的文件的32位版本位于%SYSTEMDRIVE%WindowsSysWoW64文件夹

+0

有帮助的答案。谢谢。 – djangofan 2010-11-02 00:12:05

我有同样的问题和解决方案,在我的情况,是使用一个32位的JDK。

+2

只有安装了32位MS Office 2010时,32位JDK才能正常工作。此外,在这种情况下,您通常需要使用位于SYSWOW64目录中的odbccad32.exe控制面板。我说“一般”,因为有一些警告。 – djangofan 2012-05-22 16:49:14

我有同样的问题。原因是我使用64位ODBC DSN和32位JDK。这些应该是相同的架构(ODBC DSN和JDK都需要是64位或32位)。如果您要在32位上注册ODBC DSN并从64位应用程序(64位JVM)调用,则会出现DSN源未找到的错误(因此,应用程序要查看ODBC源 - 您正在运行应用程序的JVM应该与ODBS DSN具有相同的体系结构:两者都需要64位,或者都是32位)。希望这可以帮助。

+0

是的,当我意识到有2个ODBC控制面板时,事情就开始有意义了。 – djangofan 2012-05-22 16:47:40

如果您使用Microsoft Office 2010,它将返回到64位体系结构。 因此,它将删除与驱动程序和应用程序之间的架构不匹配有关的错误。

就我而言,我对所使用的JDBC一个XP 32位JDK 6u45:ODBC驱动程序来查询.ACCDB文件。所以我有一个32位的JDK和一个32位的MS Office,当我安装它时,它会自动在我的电脑中安装必要的驱动程序。 然后,我将项目移至Windows 7,使用Netbeans 7.3,使用32位JDK 6u45,但使用64位MS Office 2013,这似乎是问题,如果您安装了32位JDK,则需要使用32位版本的Office(带有该Office版本附带的正确驱动程序)。和64位版本一样。

在我来说,我搜索了Oracle的Java存档JDK6u45的64位版本和改变了JDK的项目到64位版本