我发现这个错误之后,我遇到的问题是,当我尝试删除数据库所在的目录时,我收到错误,因为.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);
}
}
在我捕获auth异常后,我尝试删除hsqldb文件夹:
File directoryFile = new File(dirPathDB);
org.apache.commons.io.FileUtils.deleteQuietly(directoryFile);
但我得到一个错误,说“无法删除文件somepath / somelogfile.log” 我不知道为什么会发生这种情况,因为我正在关闭finally块中的连接,无论auth错误...
谢谢你,原谅我的英语!
答案 0 :(得分:3)
您无法删除数据库,因为此时此数据库已打开。
如果存在现有安装,并且您连接(即使使用了错误的凭据),则首先打开数据库以检查用户名和密码。如果检查失败,则数据库不会关闭,因为通常会尝试使用正确的凭据进行另一次尝试。
如果新安装未完成,您只需使用具有管理员权限的帐户执行SQL语句“SHUTDOWN”。这允许您删除数据库。