1

我创建了一个 CRUD 应用程序,应用程序的连接方法如下所示。我已经在我的计算机上对其进行了测试并且工作正常,但是在另一台未安装 MS Access 的计算机上进行测试时,它正在抛出NullPointerException.

那么我应该怎么做才能纠正这个问题呢?是否有任何用于连接到 .mdb 文件的库?

这些也应该在 Linux 上运行。如果库可用,我可以将 .mdb 文件转换为 Open Office Base...

void DoConnect()
{
    try{
    String current = new java.io.File( "." ).getCanonicalPath();
    current+="\\DataBases\\Quiz.mdb";
    String host = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="+current+";";
    String uName = "";
    String uPass = "";
    con=new Connection[Size];
    stmt=new Statement[Size];
    for(int i=0;i<Size;i++)
    {
        con[i]=DriverManager.getConnection(host, uName, uPass);
        stmt[i]=con[i].createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
    }
    ts=stmt[0].executeQuery("SELECT * FROM Quiz");
    ts.first();
    rs=stmt[1].executeQuery("SELECT ANSW FROM Quiz");       

    System.out.print(rs.getString("STM1"));
    }catch (IOException | SQLException err) {

    }      
}
4

2 回答 2

1

是否有任何用于连接 mdb 文件的库?

是的,有。Jet 数据库引擎包含在 Windows 中,但只有 32 位版本可用。如果您的应用程序作为 64 位进程运行,那么您需要在计算机上安装 64 位版本的 Access 数据库引擎(也称为 ACE)。您可以在此处下载 Access 数据库引擎:

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

请注意,要使用 Access 数据库引擎,您可能必须将连接字符串调整为...

String host = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ="+current+";";

...如果这在没有安装 Access 数据库引擎的32 位机器上不起作用(即,只有 Jet 数据库引擎的机器),那么您的代码可能必须

  1. 首先尝试 Jet 连接字符串(即您的原始连接字符串),如果失败则

  2. 尝试 ACE 连接字符串(即,此答案中的那个)。

于 2013-04-19T09:42:28.793 回答
0

如果您没有在所有客户端计算机上安装 Access,连接到 Access 并不是一件容易的事。此外,Access 数据库规模庞大。所以我目前正在使用非常易于使用的 H2 数据库。关于大小,在我将 140 Mb Access 数据库复制到 H2 后,文件只有 732 Kb!

更多信息可以在这里找到

于 2013-06-03T15:29:39.073 回答