[英]UCanAccess with JFileChooser: “Empty database file”
我設置了代碼,以便用戶可以輸入Microsoft Access文件的名稱,然后成功創建文件。 但是,我想使用JFileChooser使進程更順暢,但是當我使用它時,我的代碼不起作用。
這是我的(工作)以前的代碼,其中一些不相關的代碼被刪除 -
try {
fileName = JOptionPane.showInputDialog(null,"Enter file name ");
String dbPath = "C:/Users/Evan/Documents/"+fileName+".accdb";
System.out.println(dbPath);
// outputs C:/Users/Evan/Documents/fileName.accdb
try (Connection conn = DriverManager.getConnection(
"jdbc:ucanaccess://" + dbPath
+ ";newdatabaseversion=V2010"
)) {
DatabaseMetaData dmd = conn.getMetaData();
try (ResultSet rs = dmd.getTables(null, null, "Database", new String[] { "TABLE" })) {
try (Statement s = conn.createStatement()) {
s.executeUpdate("CREATE TABLE " + "Database "
+" (Row COUNTER PRIMARY KEY, A DOUBLE , B DOUBLE)");
System.out.println("File " + fileName + " created.");
valueProperty.setValue(fileName);
}
}
conn.close();
}
}
catch (Exception f){
f.printStackTrace();
}
}
這是我現在的代碼,輸出錯誤
net.ucanaccess.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.2空數據庫文件
並生成一個不包含錯誤消息“無法識別的數據庫格式”的文件以及該文件的名稱和路徑,盡管該文件的路徑與除文件名之外的其他工作文件相同:
try {
JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File("/home/me/Documents"));
int retrieval = chooser.showSaveDialog(null);
if (retrieval == JFileChooser.APPROVE_OPTION) {
FileWriter fw = new FileWriter(chooser.getSelectedFile()+".accdb");
path=chooser.getSelectedFile().getAbsolutePath()+".accdb";
// System.out.println(path);
fileName=chooser.getSelectedFile().getName();
String dbPath = path.replace("\\","/"); /* I know this looks weird, I
just did it because the output in the working version has it with / instead.
I've tried it with both slashes and the result is the same. */
System.out.println(dbPath);
// outputs C:/Users/Evan/Documents/fileName.accdb
/*where the code has an error */ try (Connection conn = DriverManager.getConnection(
"jdbc:ucanaccess://" + dbPath
+ ";newdatabaseversion=V2010"
)) {
DatabaseMetaData dmd = conn.getMetaData();
try (ResultSet rs = dmd.getTables(null, null, "Database", new String[] {
"TABLE" })) {
try (Statement s = conn.createStatement()) {
s.executeUpdate("CREATE TABLE " + "Database" +" (Row COUNTER
PRIMARY KEY, A DOUBLE , B DOUBLE)");
System.out.println("File " + fileName + " created.");
valueProperty.setValue(fileName);
}
}
conn.close();
}}
else
System.out.println("failed");
return;
}
catch (Exception f){
f.printStackTrace();
}
我很感激任何人都能給予的幫助,謝謝
;newdatabaseversion=V2010
將創建一個新的文件,如果完全不存在了。 如果它存在但包含零字節,則它不是有效的Access數據庫。 跟蹤代碼以查看它是否正在創建零字節文件,如果是,則在嘗試打開連接之前刪除該文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.