【问题标题】:How can I get information about the column caused foreign key constraint in android sqlite?如何获取有关在 android sqlite 中导致外键约束的列的信息?
【发布时间】:2016-10-20 15:06:36
【问题描述】:

我想知道是否可以获取有关SQLiteConstraintException: foreign key constraint异常的信息。

我需要知道哪个导致违反外键约束。

有没有办法从异常中获取这些信息?

如果我能得到那个约束的名称,那也很好。

【问题讨论】:

  • 是否可以推断出您的 catch 子句中缺少的约束?数据转储可能有助于捕获。

标签: android sqlite foreign-keys constraints


【解决方案1】:

我认为您可以在以下问题中找到答案:

Possible to get specific error details from Android SQLiteConstraintException?

查看 antoino 发布的解决方案 2。

【讨论】:

  • 他的解决方案中没有有价值的数据
  • 该解决方案提供了获取有关确切错误的更多信息所需的一切。您可以打印堆栈跟踪转储,这应该足够了。
【解决方案2】:

无法直接找到违反外键的列名 SQLiteConstraintException 的约束:外键约束 例外。

但是您可以找到引发 SQLiteConstraintException: 外键约束异常的操作(删除、插入、创建等)名称。在以下日志中

 04-27 11:15:27.152: E/AndroidRuntime(22031): FATAL EXCEPTION: main
    04-27 11:15:27.152: E/AndroidRuntime(22031): android.database.sqlite.SQLiteConstraintException:           
    foreign key constraint failed (code 19)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:727)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1494)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at it.jackpot21.personalmoney.DbAdapter.SQLdelete(DbAdapter.java:89)
    04-27 11:15:27.152: E/AndroidRuntime(22031):    at it.jackpot21.personalmoney.PersoneActivity$5.onClick(PersoneActivity.java:215)

在上面的日志中

04-27 11:15:27.152: E/AndroidRuntime(22031): 在 android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1494)

这告诉我们删除操作引发异常。然后您可以找到代码中的哪一行引发此异常并手动检查您的查询和列。

【讨论】:

  • 您可以从 Exception 获取这些信息,但这不是我的解决方案。
【解决方案3】:

较新的 SQLite 版本将表名添加到错误消息中,但在这两种情况下都不会获得列名。

【讨论】:

    【解决方案4】:

    您可以将您的 sql 复制到 sqlite 浏览器 http://sqlitebrowser.org/ 并尝试在那里复制错误,它应该会为您提供更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 2014-01-17
      • 2019-04-15
      • 2018-09-17
      • 2011-05-14
      • 1970-01-01
      相关资源
      最近更新 更多