gpt4 book ai didi

java - 无法删除 HSQLDB 文件

转载 作者:行者123 更新时间:2023-11-29 05:27:53 24 4
gpt4 key购买 nike

我正在开发一个基本上是安装程序的应用程序。在启动时创建一个 HSQL 数据库、一个模式并插入一些数据。之后,如果满足某些条件,我想完全删除数据库(包括文件),例如,如果由于某种原因安装失败。在我的特定情况下,当用户想要将应用程序安装在已安装应用程序的文件夹中时,一定会发生错误。因为 HSQLDB 已经存在并且具有相同的名称并且凭据已更改,所以当我尝试使用默认凭据连接到数据库时,错误发生在模式创建时。

在我捕获到这个错误之后,我遇到的问题是当我尝试删除数据库所在的目录时,我得到了一个错误,因为 .log 文件被锁定(并且它必须来 self 正在运行的应用程序持有那把锁,但我不明白为什么)。

这是在授权错误之前执行的相关代码:

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 block 中的连接,无论身份验证错误如何......

谢谢你,请原谅我的英语!

最佳答案

您不能删除数据库,因为此时它处于打开状态。

当存在现有安装并连接(即使使用错误的凭据)时,首先打开数据库以检查用户名和密码。如果检查失败,数据库不会关闭,因为通常会再次尝试使用正确的凭据进行连接。

如果新安装未完成,您只需使用具有管理员权限的帐户执行 SQL 语句“SHUTDOWN”。这允许您删除数据库。

关于java - 无法删除 HSQLDB 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22074570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com