【问题标题】:SQLiteException not being caughtSQLiteException 没有被捕获
【发布时间】:2011-11-27 05:27:18
【问题描述】:

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

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

        ...
    }

由于某种原因,我仍然收到错误消息,并且 LogCat 中没有显示“caught”。我试图捕捉一个一般的“异常”,但这仍然不起作用。怎么了?

更新 我发现了这个问题,这真的很奇怪:由于某种原因,将 db.insert() 更改为 db.insertOrThrow() 就像 goto10 所说的那样神奇地修复了所有问题。错误来自该行,但也许它没有抛出异常而只是崩溃或其他什么?

【问题讨论】:

  • 您确定从该行抛出异常吗?

标签: java android sqlite exception


【解决方案1】:

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

【讨论】:

  • 对。在.insert的情况下,如果有任何错误,该方法将返回-1
【解决方案2】:

试试这个

try { 

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

【讨论】:

    【解决方案3】:

    如果 catch 块未能捕获异常,则要么它没有被抛出到特定的 try 块中,要么你遇到了错误的异常。如果你抓住Exception,它仍然无法工作的事实表明这是前一个问题。

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

    (另一种可能性是 catch 块 正在捕获异常,但您已将日志配置设置为丢弃“调试”日志事件。)

    【讨论】:

      【解决方案4】:

      这个异常可能是在你打开数据库的时候抛出的,而不是在你插入新行的时候。

      【讨论】:

        猜你喜欢
        • 2016-06-08
        • 2012-05-31
        • 2012-06-09
        • 1970-01-01
        • 1970-01-01
        • 2013-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多