我正在開發基本上是安裝程序的應用程序。在啓動時創建一個HSQL數據庫,一個模式並插入一些數據。之後,如果滿足一些條件,我想完全刪除數據庫(包括文件),例如,如果由於某種原因安裝失敗。在我的特殊情況下,當用戶想要將應用程序安裝到已安裝應用程序的文件夾中時,必須發生錯誤。因爲HSQLDB已經存在,並且憑據已更改,所以在嘗試使用默認憑據連接到數據庫時,會在創建模式時發生錯誤。不能刪除HSQLDB文件
當我發現這個錯誤後,我遇到的問題是,當我嘗試刪除數據庫所在的目錄時,我得到一個錯誤,因爲.log文件被鎖定(並且它必須來自我正在運行的應用程序那是持有該鎖,但我不能爲什麼)。
這裏是得到授權錯誤之前執行的相關代碼:
private static void createDB(String dbName, String dbPath) {
Server server = new Server();
server.setDatabaseName(0, dbName);
server.setDatabasePath(0, "file:" + dbPath);
server.setSilent(true);
server.setRestartOnShutdown(false);
server.signalCloseAllServerConnections();
server.setNoSystemExit(true);
server.start();
server.stop();
server.shutdown();
}
private static void createSchema() throws SQLException, FileNotFoundException, IOException {
Connection conn = null;
try {
conn = DBManager.getConnection(); <---- AUTH ERROR HAPPENS HERE!
ScriptRunner runner = new ScriptRunner(conn, true, true);
runner.runScript(new BufferedReader(new FileReader("someScript.sql")));
runner.runScript(new BufferedReader(new FileReader("someScript.sql")));
} finally {
DBUtils.closeQuietly(conn);
}
}
我趕上了權威性的異常後,我嘗試做刪除HSQLDB文件夾:
File directoryFile = new File(dirPathDB);
org.apache.commons.io.FileUtils.deleteQuietly(directoryFile);
但我得到一個錯誤,說「無法刪除文件somepath/somelogfile.log」 我不知道爲什麼會發生這種情況,因爲我終於在終止塊中的連接,無論是認證錯誤...
謝謝你,原諒我的英語!
謝謝fredt!我現在明白髮生了什麼事情,但非常規我不能假定我知道已經安裝的數據庫的正確憑據,所以我不能發送關機命令,因爲我不能連接...你知道任何其他的替代方法嗎?爲了解決這個問題?謝謝! – Lucia
無關緊要,我找到了解決方案,以適應我的具體情況,所以我不需要刪除數據庫:) – Lucia