我正在尝试捕获“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声明了所有内容。错误来自该行,但也许它不是抛出异常而只是崩溃或什么?
答案 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)
当您打开数据库时,可能会抛出异常,而不是在插入新行时抛出异常。