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

use*_*408 83 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Pec*_*ill 127

这些都不是为我做的.我确实在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来挑选/选择正确的一个.

  • 必须有点和谐.如果应用程序是32,则必须有32位配置.如果应用程序是64,你必须有一个64.我没有尝试创建具有相同名称的配置,因为我不希望它们不同步(忘记同时更改两者).您没有给我足够的信息来尝试提供建议.我希望你明白这一点.(为什么他们不能做这么简单的事情并创建一个配置64位和32位环境的64位应用程序???) (2认同)
  • 需要明确的是:*您不能*通过64位系统上的常规Windows GUI建立32位PostgreSQL ODBC连接。相反,您需要关闭ODBC数据源管理器(如果当前已打开),运行`c:\ windows \ sysWOW64 \ odbcad32.exe”并从那里配置连接。然后,您可以稍后在32位程序中使用该连接来访问数据库。 (2认同)

小智 26

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

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

对于那些试图在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驱动程序.


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

  • 我想你切换了两个ODBC管理器`32位的路径:c:\ windows\system32\odbcad32.exe``64位:c:\ windows\sysWOW64\odbcad32.exe` (2认同)
  • @Jrgns不,它们没有切换。sysWOW64实际上是32位目录。Windows令人困惑。您将知道所使用的版本,因为它将在ODBC数据源管理器的标题栏中显示(32位)或(64位)。 (2认同)

Mob*_*Mob 8

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

看到这个

修复:取决于您的架构.

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

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