【问题标题】:SQLiteDatabase.insertWithOnConflict throws exception. It should notSQLiteDatabase.insertWithOnConflict 抛出异常。它不应该
【发布时间】:2014-11-10 12:45:44
【问题描述】:

我正在开发一个 Android 应用程序,有时我需要使用来自服务器的一些数据来更新 SQLite 数据库。

我尝试插入的数据可能会产生冲突,因为已经存在具有相同主键的行。这就是我将 insertWithOnConflictCONFLICT_IGNORE 标志一起使用的原因。这个想法是“如果数据不存在则存储它,如果它已经存在则忽略并继续前进”。

但是,当发生冲突时,我发现我的应用程序因以下异常而崩溃:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.novadart.booster.android, PID: 1643
    android.database.sqlite.SQLiteConstraintException: foreign key constraint failed (code 19)
            at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
            at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:782)
            at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
            at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
            at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)

当文档说不应抛出异常时,为什么会出现异常?是错误还是我遗漏了什么?

例如,如果我使用 insert,我可以在日志中看到相同的异常,但应用程序不会崩溃(该方法返回 -1 就是这样)。

【问题讨论】:

标签: android sqlite android-sqlite conflict


【解决方案1】:

问题是我插入的行违反了外键约束(引用的行不存在)。由于某种原因,我忽略了这一点。

所以,这不是 insertOnConflict 的错。

【讨论】:

  • @piyush 感谢您的回答,为我指明了正确的方向,即使它没有解决问题(我没有删除该行)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多