如何在android sqlite中获取有关该列的信息导致外键约束?

时间:2016-06-19 05:30:59

标签: android sqlite foreign-keys constraints

我想知道是否有可能获得有关SQLiteConstraintException: foreign key constraint例外的信息。

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

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

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

4 个答案:

答案 0 :(得分:4)

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

Possible to get specific error details from Android SQLiteConstraintException?

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

答案 1 :(得分:1)

  

没有直接的方法来查找违反外键的列名   来自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):at   android.database.sqlite.SQLiteDatabase.delete(SQLiteDatabase.java:1494)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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