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

时间:2012-01-17 13:56:48

标签: java odbc

我正在尝试使用Java连接到MS Access创建的数据库,但我似乎无法管理。我正在使用ODBC,我得到了这个例外:

java.sql.SQLException:[Microsoft] [ODBC驱动程序管理器]指定的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);
        }
    }
}

18 个答案:

答案 0 :(得分:124)

这些都不是为我做的。我确实在MSDN上找到了答案。但有一些暗示。错误中的体系结构是指32比64位。我的解决方案是找出我的应用程序在(Access)下运行的哪个2010是32b。我通过查看任务管理器的“进程”选项卡找到了这一点,其中所有32b进程都有* 32名称的结尾。如前所述,控制面板将从此处启动 64 位版本的ODBC

c:\windows\system32\odbcad32.exe

和32位版本在这里:

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

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

答案 1 :(得分:24)

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

  1. 您正在使用的ODBC驱动程序的位版本
  2. 用于设置它的ODBC管理器的位版本。
  3. 对于那些试图在64位Windows系统上将MS-Access连接到MySQL的人,我经历了纯粹的折磨,试图让它与MS-Access 2010和MS-Access 2013一起工作。最后让它工作,以下是我在此过程中学到的经验教训:

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

    1. 我使用All In One软件包安装安装了最新版本的MySQL 5.6。这允许您一次安装数据库和ODBC驱动程序。这很好,但它安装的ODBC驱动程序似乎是64位,所以它不适用于32位MS-Access。它似乎也有点小马车 - 不确定那个。在ODBC管理器中添加新DSN时,此驱动程序显示为“Microsoft ODBC For Oracle”。我无法让这个工作。我必须安装32位,如下所述。

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


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

    3. 我的机器是64位机器。因此,默认情况下,当您为MS-Access设置DSN,并通过控制面板,管理选项以通常的方式进入ODBC管理器时,您将获得64位ODBC管理器。你无从知晓!你无法分辨。这是一个巨大的陷阱!!无法从那里设置DSN并使其成功连接到MS Access 32位。你会得到可怕的错误:

        

      “指定的dsn包含体系结构不匹配...”

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

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

    5. 您必须告诉控制面板中的ODBC管理器进行加权,而必须使用在Start,Command提示符下执行此命令显式调用32位ODBC Manager:

        

      C:\ WINDOWS \ SYSWOW64 \ odbcad32.exe的

      我在桌面上创建了一个快捷方式。在此处,使用此经理构建您的DSN。重要的一点:将它们构建为系统DSNS,而非用户DSNS!这让我绊倒了一段时间。

      顺便说一句,64位版本的ODBC管理器也可以显式运行:

        

      C:\ Windows \ System32下\ odbcad32.exe的

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


    7. 就是这样。一旦在32位ODBC管理器中定义了DSN,就可以通过Access中的常规方式连接到MySQL - 外部数据,ODBC数据库,链接到数据库,选择机器数据源,以及为MySQL创建的DSN数据库将在那里。

答案 2 :(得分:8)

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

请参阅this

修复:取决于您的架构。

如果Java是64位,则需要64位驱动程序。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

从驱动程序的安装程序安装ODBC驱动程序后,您可以为其定义一个或多个数据源。数据源名称(DSN)应提供数据的唯一描述;例如,Payroll或Accounts Payable。为“所有当前安装的驱动程序”定义的用户和系统数据源列在“ODBC数据源管理器”对话框的“用户DSN”或“系统DSN”选项卡中。文件DSN选项卡中列出了给定目录中的文件数据源;要显示的目录在“文件DSN”选项卡的“查找范围”框中输入。 System_CAPS_noteNote

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

如果您使用64位odbcad32.exe配置或删除连接到32位驱动程序的DSN,例如,驱动程序执行Microsoft Access(* .mdb),您将收到以下错误消息:< / p>

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

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

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

答案 6 :(得分:1)

您遇到的问题可能是因为:您有Office 32位和命令提示符64位。 要解决此问题,您需要执行以下两个步骤:

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

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

  3. 希望这会有所帮助。

答案 7 :(得分:1)

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

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

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

我尝试使用DSN连接,同时使用ODBC管理器的System32和SysWOW64版本,但这些都没有用。

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

我认为这也会更有帮助。

用于架构未命中匹配,

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

然后你的好去。

请注意: 您应该对64位文件进行压缩,因此当您想要创建64位应用程序时,可以将其返回到其位置

答案 10 :(得分:0)

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

答案 11 :(得分:0)

我已修复错误。

按照以下步骤操作:

  1. 安装32位版本的JDK
  2. 安装MS-Office 2007
  3. 配置控制面板:  一个。控制面板b。管理员工具c。数据源(ODBC)

    右键点击它将目标更改为\sysWOW64\odbcad32.exe,将开头更改为r%\SysWOW64

  4. 执行它和祝你好运。适用于Windows 7以及8

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

答案 12 :(得分:0)

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

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

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

  1. 了解您的操作系统是64位,但您的Microsoft Office是32位。
  2. 因此,为了使用NetBean IDE访问您的数据库(假设您正在使用它),您需要安装32位JDK。如果已安装64位,则必须卸载它并安装32位。
  3. 您无法访问数据库,因为您的64位JVM与32位JVM不同。

    将数据库添加到系统中 1.控制面板 2.管理员工具 3.数据源(ODBC) 右键单击它将目标更改为 \ SYSWOW64 \ odbcad32.exe的 改变开始 R%\ Syswow64资料

    然后你应该能够跑。如果您对此有任何问题,请通知我。

    谢谢!

答案 13 :(得分:0)

在使用某些旧版CLASP应用程序升级到Windows 7服务器时遇到此问题。尝试在64位计算机上运行32位应用程序。

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

从运行框中打开两个版本中的odbc数据源窗口。 C:\ WINDOWS \ Syswow64资料\ odbcad32.exe的 C:\ Windows \ System32下\ odbcad32.exe的

答案 14 :(得分:0)

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

答案 15 :(得分:0)

如果您正在使用netbeans,请转到工具 - &gt; java平台,将指向c:/ programfiles / java / jdk1_7的jdk_home更改为c:programFiles(x86)/ java / jdk1_6_21

如果不可编辑 找到netbeans.cnf并按照jdk_home的说明进行更改。重新启动neatbeans及其工作原理 我有同样的问题,但我工作了。

答案 16 :(得分:0)

您是否先在控制台&gt;管理工具&gt; ODBC&gt;系统DSN中创建了DSN。 将其命名为“myDatabase”,如果我要求查找数据库/访问文件,请使用浏览选项指定路径。 一旦您成功创建了您的DSN,您就可以轻松访问您的数据库。

答案 17 :(得分:-1)

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

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