我的应用程序使用了一些复杂的SQL语句,所以我经常使用execsql可能是坏习惯,即使我可能/应该使用插入或更新等简单操作(下面) 。Android Sqlite SQLiteAbortException不起作用
不过,我想知道这是为什么不工作
String query = "UPDATE OR ABORT " + myTable + " SET " + .... column names and values + WHERE ...
try {
db.execSQL(query);
} catch (SQLiteAbortException e) {
Log.i(TAG, "error in the update");
我已经与数据应清楚失败尝试这个(即没有匹配的记录更新),但我不打抓。最初我曾使用UPDATE OR FAIL和SQLiteConstraintException,但是当它没有被捕获时,我尝试了SQLiteAbortException异常
一个异常,指示SQLite程序被中止。这个 可以通过在触发器中调用ABORT或者使用ABORT冲突子句的结果来实现。
我在这里错过了什么?
更新:只需在INSERT/UPDATE或ABORT/FAIL中添加this以供参考如果SQLiteAbortException不是方法,如何捕获更新中止/失败?
我在想,'ABORT'只是一个解决约束违规的情况。如果数据没有更新,那么也没有违规中止。你能否尝试一个违反约束的更新语句(例如用另一个已有的主键值更新主键值)? – tiguchi
@Nobu SQliteAbortException不能按预期方式工作。所以我尝试使用INSERT而不是更新,因为我知道我会因非唯一键而导致违规。没有效果。但是,更改为SQLiteConstraintException确实会抛出错误。在这两种情况下使用UPDATE不会引发错误,但您不希望发生违反约束的错误。 – TrustNoOne