无法连接到 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 数据库
无法通过 ODBC 将 Access 连接到 SQLlite