没有捕获SQLiteException

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

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

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

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

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

试试这个

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

如果该catch块未能捕获exception,那么它不会被抛入该特定的try块中,或者您得到了错误的exception。 如果你捕获Exception它仍然不起作用的事实说它是前一个问题。

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

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

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