如果一个应用程序由于其他非故意的异常而崩溃,java SQL数据库会关闭吗?
在阅读了数据库SQL最佳实践之后,我将两个try-catch提取到两个不同的方法中。我能想到的唯一一件事是,如果在执行getReadableDatabase()
之后出现了外部未受影响的异常,那么就会造成数据库泄漏。所以我的问题是,如果一个应用程序崩溃并重新启动,该应用程序会自我清理吗?例如,是否帮助我关闭此数据库会话?正如你所见,我并不完全理解应用程序崩溃/重启后会发生什么
try {
SQLiteDatabase database = helper.getReadableDatabase();
doALongDatabaseTask(database);
database.close();
} catch (SQLException e){
Log.w(Util.TAG, "getButtonPairsForSending db cannot be opened " + e);
}
public void doALongDatabaseTask(SQLiteDatabase database){
try
{
// Do long database query task
} catch(Exception e) {
}
}
# 1 楼答案
在您的示例方法
doALongDatabaseTask(SQLiteDatabase database)
中,异常是被处理的,它什么也不做,所以在这种情况下,您的数据库将调用close()
但是,如果您的方法被定义为抛出异常
然后,关闭调用将被跳过,因为它进入了示例第一部分中的catch块
假设您使用的sdk版本足够高:如果您查看^{} 的文档,您可以看到它实现了接口
AutoCloseable
。 这意味着您可以使用如下所示的资源进行尝试这相当于在finally块中调用
database.close()
(无论如何都应该这样做),但可读性更高。在大多数情况下,当你的应用程序崩溃时,这应该会清理连接,重新启动后可以获得新的连接