没有捕获SQLiteException

时间:2011-11-27 05:27:19

标签: java android sqlite exception

我正在尝试捕获“android.database.sqlite.SQLiteException:错误代码5:数据库被锁定”异常:

    try {
        db.insert("mytable", null, myvalues);
    } catch(SQLiteException e) {
        Log.d("My App", "caught");

        ...
    }

由于某种原因,我仍然收到错误,并且“抓住”没有出现在LogCat中。我尝试捕获一般的“例外”,但仍然无效。怎么了?

更新 我发现了这个问题,这真的很奇怪:出于某种原因,将db.insert()更改为db.insertOrThrow(),因为goto10声明了所有内容。错误来自该行,但也许它不是抛出异常而只是崩溃或什么?

4 个答案:

答案 0 :(得分:10)

我不相信.insert会抛出异常。您可能只是看到它在内部捕获异常时正在写入的日志消息。如果您希望在插入失败时抛出异常,请改用.insertOrThrow

答案 1 :(得分:0)

试试这个

try { 

} catch( SQLiteException e) {
     Log.e("My App",e.toString(), e);
}

答案 2 :(得分:0)

如果catch块无法捕获异常,那么它不会被抛入特定的try块内,或者您得到了错误的异常。如果你抓住Exception它仍然不起作用的事实说这是前一个问题。

所以你需要找出实际抛出异常的位置。我尝试更改日志记录配置以使LogCat记录完整的异常堆栈跟踪。这应该告诉你它被抛出的位置。如果你不能这样做,那么你需要使用调试器找到它...或者通过浏览你的应用程序源代码来找到异常被记录的位置。

(另一种可能是catch块 捕获异常,但是你已经设置了日志记录配置以丢弃“调试”日志事件。)

答案 3 :(得分:0)

当您打开数据库时,可能会抛出异常,而不是在插入新行时抛出异常。