无法连接到 Access 数据库(“架构不匹配”错误)[重复]

Posted

技术标签:

【中文标题】无法连接到 Access 数据库(“架构不匹配”错误)[重复]【英文标题】:Can't connect to Access database ("architecture mismatch" error) [duplicate] 【发布时间】:2014-02-24 13:52:48 【问题描述】:

从数据库中检索记录的程序

       import java.sql.*;
       import javax.sql.*;

public class Database 

    public static void main(String a\[\])
    
        try
        
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection cn =DriverManager.getConnection("jdbc:odbc:data");
        Statement st=cn.createStatement();
        ResultSet rs= st.executeQuery("select * from student ");
        while(rs.next())
        
            int r=rs.getInt(1);
            String n= rs.getString(2);
            int m=rs.getInt(3);
            System.out.println("Roll Name Marks");
            System.out.println(r+" "+n+" "+m);
        
        cn.close();
        
        catch(Exception e)
        
        
    
][1]

我正在运行 64 位 Windows 7 从 sysWOW64 文件夹创建 DSN 有一个由 3 个字段组成的数据库 Roll Name Mark 编译后没有发现错误 执行程序没有输出 为什么我无法执行程序

![在命令行无输出][1]

从 cmets 编辑

我得到的例外是

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

【问题讨论】:

在catch块中使用e.printStackTrace(),看看有没有异常。 您可能在运行时遇到异常,但由于catch 块为空,您看不到它。您必须确保 Java、DSN 和 MS ODBC 驱动程序都是相同的 32 位或 64 位架构。否则你会遇到兼容性问题。 这是输出 java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contains an architecture mismatch between the Driver and Application 这就是我要说的。您的 Java 架构可能是 64 位,但通过 sysWOW64 访问 DSN 是 32 位 ODBC 控制器(如果我没记错的话)。因此,您会遇到架构不匹配的问题。 那么需要什么解决方案 【参考方案1】:

基于此错误:

java.sql.SQLException: [Microsoft][ODBC Driver Manager] The specified DSN contai ns an architecture mismatch between the Driver and Application

问题是您的 Java 架构可能是基于 64 位的,但是当您通过此路径访问Odbcad32.exe 时:

%windir%\SysWoW64\odbcad32.exe

您实际上是在访问 32 位版本的 ODBC 控制器。因此,您会遇到架构不匹配的问题。查看此answer 了解更多详情。

要使其正常工作,您必须确保 Java、DSN 和 MS ODBC 驱动程序都是相同的 32 位或 64 位架构。

所以你可以:

下载 32 位 JDK 并保留您已有的 DSN。 直接从%windir%\System32文件夹访问DSN(是 64 位版本)并在那里创建数据源。

【讨论】:

我应该得到 office 64 位还是 jdk 32 位...(jdk 是 64 位) 没错。我之前也遇到过同样的问题,因为我的 Office 是 32 位的。我已经下载了 32 位的 jdk,并通过与您相同的路径访问了 DSN。然后一切都是基于 32 位的,它就像一个魅力。 @user3346898 感谢一切都像魅力一样工作 @user3346898 不客气。请不要忘记“接受”答案:How does accepting an answer work?【参考方案2】:

当您没有收到 Java 异常/错误并且没有输出时,您似乎可以连接到数据库并且它根本不包含任何数据。

【讨论】:

不,它包含四个 recoeds 可能存在异常。但是您还没有打印该异常。所以可能没有输出。 @user3346898 那么你必须调试,如果没有关于代码的任何具体问题,我们不会远程帮助你。 我用过sysWoW64文件夹里的cmd还是没有o/p

以上是关于无法连接到 Access 数据库(“架构不匹配”错误)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Talend 连接到 Access 2007 数据库

无法通过 PHP 连接到 Access 数据库

无法通过 ODBC 将 Access 连接到 SQLlite

UCanAccess - 使用 keepMirror 后无法重新连接到 Access 数据库

无法连接到远程 MS Access 数据库

无法从 Excel 中的 VBA 查询连接到 Access 数据库