指定的DSN包含驱动程序和应用程序之间的体系结构不匹配。 JAVA

我试图连接到使用Java的MS Access制作的数据库,但我似乎无法pipe理。 我正在使用ODBC,我得到这个exception:

java.sql.SQLException:[Microsoft] [ODBC Driver Manager]指定的DSN包含驱动程序和应用程序之间的体系结构不匹配

我的Java:

package javaapplication2; import java.sql.Statement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; /** * * @author Owner */ public class JavaApplication2 { /** * @param args the command line arguments * */ public static void main(String[] args) { // TODO code application logic here try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String sourceURL = new String("jdbc:odbc:myDatabase"); System.out.println(sourceURL); Connection dbConnection = DriverManager.getConnection(sourceURL,"admin",""); Statement myStmt = dbConnection.createStatement(); String query = "INSERT INTO People(ID, Name, Surname, Age, Contact, Location, Course) VALUES" + " (1007, 'Elroy', 'Smith', '33', 21366688, 'Somewhere', 'somecourse')"; myStmt.executeUpdate(query); ResultSet results = myStmt.executeQuery("SELECT * FROM People"); while(results.next()) { System.out.print(results.getString(1)); System.out.print(results.getString(2)); System.out.print(results.getString(3)); System.out.println(results.getString(4)); } results.close(); } catch(ClassNotFoundException cnfe) { System.out.println(cnfe); } catch(SQLException sqle) { System.out.println(sqle); } } } 

这些都没有为我做。 我在MSDN上find了答案。 有一些提示,但。 错误中的体系结构是指32位和64位。 我的解决scheme是找出哪个我的应用程序正在(Access)下运行哪个2010是32b。 我通过查看任务pipe理器的进程选项卡find了这一点,其中所有32b进程的名称都以* 32结尾。 如前所述,控制面板将从这里启动64位版本的ODBC

c:\windows\system32\odbcad32.exe

和32位版本在这里:

c:\windows\sysWOW64\odbcad32.exe (最容易复制并粘贴到运行对话框中)

因此,我在每个相应的ODBC控制面板(AKApipe理员)中设置了名称以32和64结尾的DSN,这些面板指向相同的东西。 然后,我根据使用它的应用程序是32b还是64b来挑选正确的。

当Access的位版本(32 vs 64)不匹配时,当您尝试从MS-Access连接到MySQL数据库时,会出现完全相同的错误

  1. 您正在使用的ODBC驱动程序的位版本
  2. 您用来设置它的ODBCpipe理器的位版本。

对于那些试图在64位Windows系统上连接MS-Access到MySQL的人,我经历了一个彻底的折磨,试图使它与MS-Access 2010和MS-Access 2013一起工作。最后得到它的工作,这里是我学到的经验教训:

我买了一个新的Windows 7,64位笔记本电脑,我有一个应用程序,依靠MS-Access使用MySQL表。

  1. 我安装了最新版本的MySQL 5.6,使用All In One软件包安装。 这使您可以同时安装数据库和ODBC驱动程序。 这很好,但它安装的ODBC驱动程序似乎是64位的,所以它不能与32位MS-Access一起使用。 这似乎也是一个小错误 – 不能肯定在那一个。 当您在ODBCpipe理器中添加新的DSN时,此驱动程序显示为“Microsoft ODBC For Oracle”。 我无法得到这个工作。 我不得不安装32位,下面讨论。

    • MySQL安装后工作正常。 我以通常的方式恢复了我的应用程序MySQL数据库。 现在我想用MS-Access连接到它。

  2. 我以前安装的Office 2013,我认为是64位。 但在检查版本(文件,帐户,关于访问),我看到它是32位。 Access 2010和2013都是最常见的32位版本。

  3. 我的机器是64位机器。 所以默认情况下,当你去设置MS-Access的DSN时,通过控制面板,pipe理选项以通常的方式进入ODBCpipe理器,你将得到64位的ODBCpipe理器。 你无法知道! 你只是不能告诉。 这是一个巨大的瑕疵! 从这里build立一个DSN是不可能的,并且可以成功连接到MS Access 32位。 你会得到可怕的错误:

    “指定的dsn包含架构不匹配…”

  4. 您必须从MySQL下载并安装32位ODBC驱动程序。 我使用的版本3.5.1

    http://dev.mysql.com/downloads/connector/odbc/3.51.html

  5. 您必须告诉控制面板中的ODBCpipe理器进行远程调用,而必须使用在“启动”,“命令”提示符处执行的此命令显式调用32位ODBCpipe理器:

    C:\ WINDOWS \ SYSWOW64 \ odbcad32.exe的

    我在桌面上创build了一个快捷方式。 从这里,与这位经理build立你的DSN。 重要的一点:build立他们的系统DSNS,而不是用户DSNS! 这使我绊了一会儿。

    顺便说一下,64位版本的ODBCpipe理器也可以显式运行为:

    C:\ WINDOWS \ SYSTEM32 \ odbcad32.exe的

  6. 从MySql安装32位ODBC驱动程序后,当您在ODBCpipe理器中单击添加时,您将看到2个列出的驱动程序。 select“MySQL ODBC 5.2 ANSI驱动程序”。 我没有尝试UNICODE驱动程序。


那就是了。 一旦你在32位的ODBCpipe理器中定义了你的DSN,你就可以按照通常的方式从Access – 外部数据,ODBC数据库,链接到数据库,select机器数据源和你创build的DSN到你的MySQL数据库将在那里。

有一个架构不匹配。 您的JDBC驱动程序和您的JDK应该具有相同的体系结构。 如果你使用的32位驱动程序和你的JDK是64位,你会得到这个错误。

看到这个

修复:取决于你的架构。

如果您的Java是64位的,您将需要64位驱动程序。

下载: http : //www.microsoft.com/downloads/details.aspx?familyid=C06B8369-60DD-4B64-A44B- 84B371EDE16D& displaylang=en

默认情况下,命令提示符连接到System32。 运行64位命令提示符,即C:\WINDOWS\SYSWOW64\CMD.EXE 。 在那,编译并运行你的java应用程序。

您遇到的问题可能是因为:您的Office 32位和命令提示符64位。 要解决这个问题,你需要遵循2个步骤:

  1. 使用以下命令打开DSN的ODBCpipe理器:C:\ Windows \ SysWOW64 \ odbcad32.exe这将打开32位版本的ODBC数据pipe理器,您将看到所有的数据库驱动程序。

  2. 之后,您需要使用以下命令打开32位命令提示符:C:\ Windows \ SysWOW64 \ cmd.exe这将打开32位版本的命令提示符。 在这个新的CMD中,请重新编译您的Java程序并运行您的程序。

希望这会有所帮助。

有点晚了,但是因为我遇到了同样的问题,在你的确切的情况下,我想我会添加我的解决scheme。

我有Windows 7(64位)和Office 2010(32位)。 我尝试使用无DSN连接string:

 jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=I:/TeamForge/ORS/CTFORS.accdb 

我尝试使用DSN连接,使用ODBCpipe理的System32和SysWOW64版本,都没有工作。

最终奏效的是将Java的位版本与Office的位版本进行匹配。 一旦我这样做,我可以使用DSN或DSNless连接模式,没有任何大惊小怪。

我看到了这个答案,它为我工作。 https://msdn.microsoft.com/en-us/library/ms712362%28v=vs.85%29.aspx

从驱动程序的安装程序安装ODBC驱动程序后,可以为其定义一个或多个数据源。 数据源名称(DSN)应提供数据的唯一描述; 例如工资单或应付帐款。 “ODBC数据源pipe理器”对话框的“用户DSN”或“系统DSN”选项卡中列出了为当前安装的所有驱动程序定义的用户和系统数据源。 文件DSN选项卡中列出了给定目录中的文件数据源; 将显示的目录input到“文件DSN”选项卡的“查找范围”框中。 System_CAPS_noteNote

要pipe理连接到64位平台下的32位驱动程序的数据源,请使用c:\​​ windows \ sysWOW64 \ odbcad32.exe。 要pipe理连接到64位驱动程序的数据源,请使用c:\​​ windows \ system32 \ odbcad32.exe。 在64位Windows 8操作系统上的“pipe理工具”中,“32位和64位ODBC数据源pipe理员”对话框均有图标。

如果使用64位odbcad32.exe来configuration或删除连接到32位驱动程序的DSN,例如Driver do Microsoft Access(* .mdb),您将收到以下错误消息:

指定的DSN包含驱动程序和应用程序之间的体系结构不匹配

要解决此错误,请使用32位odbcad32.execonfiguration或删除DSN。

数据源将特定的ODBC驱动程序与要通过该驱动程序访问的数据相关联。 例如,您可能创build一个数据源以使用ODBC dBASE驱动程序来访问硬盘或networking驱动器上特定目录中find的一个或多个dBASE文件。 使用ODBC数据源pipe理器,您可以添加,修改和删除数据源,如下表中所述。

您是否先在“控制面板”>“pipe理工具”>“ODBC”>“系统DSN”中创build了DSN。 将其命名为“myDatabase”,如果我要求查找数据库/访问文件,请使用browse选项指定path。 一旦你的DSN将成功创build,你将会很容易地访问你的数据库。

如果你使用的是NetBeans,请转至tools-> java Platform,将指向c:/ programfiles / java / jdk1_7的jdk_home更改为c:programFiles(x86)/ java / jdk1_6_21

如果不是可编辑的话,findnetbeans.cnf并按照jdk_home的说法进行更改。 重新启动neatbeans和它是如何工作我有同样的问题,但我工作。

我在使用MS Access 2010运行Windows 7的64位笔记本电脑上连接到MySQL时遇到了很多麻烦。我发现上一篇文章非常有帮助,但仍然无法使用odbc 3.5.1进行连接。 正如我以前使用连接器/ ODBC 5.1.13链接一个32位机器,我下载了该版本,并使用上面的说明进行设置。 成功。 答案似乎是尝试不同版本的Connector.odbc。

如果使用32位驱动程序从64位平台进行连接,请运行可执行文件C:\ Windows \ SysWOW64 \ odbcad32.exe并创buildDSN。 它会工作。

升级到Windows 7服务器与一些传统的CLASP应用程序时,我遇到了这个问题。 尝试在64位机器上运行32位应用程序。

尝试将应用程序池的32位兼容性设置为True,和/或创build32位和64位的dsn。

从运行框中打开两个版本的odbc数据源窗口。 C:\ Windows \ SysWOW64 \ odbcad32.exe C:\ Windows \ system32 \ odbcad32.exe

我确实遇到过这个问题。 这是由于您使用的计算机体系结构和数据库体系结构。

如果您使用32位操作系统,那么一切正常,因为您只能安装32位软件。 当您使用64位操作系统时会出现问题。

为了解决这个问题很简单 – 我花了很长时间才发现这个问题。

  1. 了解您的操作系统是64位,但您的Microsoft Office是32位。
  2. 因此,为了让您使用NetBean IDE访问数据库(假设您正在使用这个),您需要安装32位JDK。 如果您安装了64位,则必须将其卸载并安装32位。

您无法访问您的数据库,因为您的64位JVM与32位JVM不同。

将数据库添加到您的系统1.控制面板2.pipe理员工具3.数据源(ODBC)右键单击它将目标更改为\ sysWOW64 \ odbcad32.exe将开始更改为r \ SysWOW64

那么你应该可以运行。 告诉我,如果你有这个问题。

谢谢!

我已经修复了错误。

按照步骤:

  1. 安装32bt版本的JDK
  2. 安装MS-Office 2007
  3. configuration控制面板:a。 控制面板b。 pipe理员工具c。 数据源(ODBC)

    右击它将目标更改为\sysWOW64\odbcad32.exe将开始更改为r%\SysWOW64

执行它和最好的运气。 在Windows 7和8中工作

删除较新版本的MS-Office,并只安装MS-Office 2007,如果问题仍然存在

要解决这个问题首先确保你的java软件应该是32位版本,如果它是64位版本,显然它会显示不匹配的错误,所以尝试重新安装32位的Java版本和执行Java程序的命令c:\windows\sysWOW64\odbcad32.exe (最容易复制并粘贴到运行对话框),这是足够的你的程序肯定工作

我认为这也会更有帮助。

对于架构错过匹配,

我只是从32位文件C:\ Program Files(x86)\ Java \ jdk1.7.0_71复制jdk文件并将其粘贴到64位文件C:\ Program Files \ Java \ jdk1.7.0_10,然后重命名该文件以匹配您replace的文件以避免IDE错误(netbeans)

那么你的好去。

注意:你应该打消你的64位文件,所以当你想创build64位应用程序,你可以返回到它的位置

要解决这个问题首先确保你的java软件应该是32位版本,如果它是64位版本,显然它会显示不匹配的错误,所以尝试重新安装32位的Java版本和执行Java程序的命令c:\ windows \ sysWOW64 \ odbcad32.exe(最容易复制并粘贴到运行对话框),这是足够的你的程序肯定工作

转到此链接并下载64位操作系统的ODBC驱动程序。

http://www.microsoft.com/en-us/download/details.aspx?id=13255