【问题标题】:Android db connection and try catch regarding scopeAndroid db连接并尝试捕获有关范围
【发布时间】:2011-10-27 05:58:41
【问题描述】:

您好,我正在尝试清理我的代码以删除指出我的数据库连接已打开但未正确关闭的错误。

如果我有一个 db.open(),那么在 db 查询周围有几个 try catch 语句,那么 try catch 之后的 db.close() 将在 try catch 中使用相同的 db 连接,还是 java 离散地运行 try catch 语句,因此 db 连接不可用。

简而言之,我应该有这样的代码:

db.open();
try {
 // here
 db.getThings()
} catch () {
 // there
}
try {
 // here 2
 db.getMoreThings()
} catch () {
 // there 2
}
db.close();

或者这个:

try {
 // here
 db.open();
 db.getThings()
 db.close();
} catch () {
 // there
}

try {
 // here 2
 db.open();
 db.getMoreThings()
 db.close();
} catch () {
 // there 2
}

我认为打开一个数据库连接的第一个解决方案是更好的解决方案。但是我遇到了不关闭数据库连接的问题,我正在考虑我的设计存在根本问题。

我也尝试在 onResume() 中打开连接,然后在 onPause() 中关闭,但仍然有问题。

【问题讨论】:

    标签: java android database connection try-catch


    【解决方案1】:

    建议一选择数据就关闭数据库连接,所以在我的应用程序中我主要使用以下模板:

    db.open();
    try {
        // select data
    } finally {
        db.close();
    }
    

    它对我有用。

    【讨论】:

    • 嗯,我只是考虑将db.close() 放入Finally 语句中。对于初学者,我意识到,如果我的try / catch 实际上捕获了一个异常,那么我的db.close() 将不会运行,但最终使用它会保证db.close()。不过我有一个问题:您认为 db.open() 在 try 语句之前还是在 try 中更好?谢谢你的建议
    • 我把 db.open 放在 try 之前,因为它可能会引发一些异常。如果你把它放在 try -- finally 并且 db.open 触发一个异常,那么 finally 块中的 db.close 也会触发一个异常(类似于“DB 未打开”),它将掩盖原始异常。
    • 谢谢。现在就实现这个,看看效果如何
    • 工作完美,干杯。我在尝试之前输入了db.open(),在finally() 中输入了db.close()。现在任何屏幕上都不再出现“未关闭的数据库”错误。
    猜你喜欢
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多