我创建了一个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) {
}
}
答案 0 :(得分:1)
是否有用于连接mdb文件的库?
是的,有。 Jet数据库引擎包含在Windows中,但只有32位版本可用。如果您的应用程序作为64位进程运行,那么您需要在计算机上安装64位版本的Access数据库引擎(a.k.a. 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数据库引擎的计算机),那么您的代码可能必须
首先尝试Jet连接字符串(即原始连接字符串),如果失败则
尝试ACE连接字符串(即本答案中的连接字符串)。
答案 1 :(得分:0)
如果您没有在所有客户端计算机上安装访问权限,则连接到Access并非易事。 此外,Access数据库的规模很大。 所以我目前正在使用H2数据库,它非常易于使用。 关于大小,在我将140 Mb Access数据库复制到H2后,该文件仅为732 Kb!
可以找到更多信息here