无法连接到Access数据库(“体系结构不匹配”错误)

时间:2014-02-24 13:52:48

标签: java ms-access jdbc

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

       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]

根据评论进行修改

我得到的例外是

  

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

2 个答案:

答案 0 :(得分: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位版本)并在那里创建数据源。

答案 1 :(得分:-2)

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