2017-06-20 3 views
1

ユーザーがMicrosoft Accessファイルの名前を入力できるようにコードを設定しました。ファイルが正常に作成されました。しかし、私はJFileChooserを使ってプロセスをスムーズにしたいと思いますが、私のコードを使用するとコードが機能しません。いくつかの無関係なコードがUCanAccess with JFileChooser: "Empty database file"

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(); 
} 
     } 

をOUT-切り取らそしてここ

net.ucanaccessのエラーを出力し、私が今持っているコードは、あるとここで

は、私の(作業)以前のコードです.jdbc.UcanaccessSQLException:UCAExc ::: 4.0.2空データベースファイル

エラーメッセージ "unrecognized database fファイル名を除いた他の作業ファイルと同一であるファイルのパスにもかかわらず、書式(O)」と、ファイルの名前とパス、:

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(); 
} 

私は感謝

+0

'; newdatabaseversion = V2010'が存在しない場合は、新しいファイルを作成します。存在してもゼロバイトが含まれている場合、有効なAccessデータベースではありません。コードをトレースしてゼロバイトファイルが作成されているかどうか調べ、そうであれば接続を開く前にそのファイルを削除します。 –

+0

'FileWriter fw = new FileWriter(chooser.getSelectedFile()+"。accdb ");'行を削除しました。これで完璧に動作しました。ありがとうございました! – Evan

答えて

0

、誰でも提供できる任意の助けをいただければと思います;newdatabaseversion=V2010が存在しない場合は、新しいファイルが作成されます。はすべてです。存在してもゼロバイトが含まれている場合、有効なAccessデータベースではありません。コードをトレースしてゼロバイトファイルが作成されているかどうか調べ、そうであれば接続を開く前にそのファイルを削除します。