我想知道是否有可能获得有关SQLiteConstraintException: foreign key constraint
例外的信息。
我需要知道哪个列导致违反外键约束。
有没有办法从异常中获取这些信息?
如果我能得到该约束的名称,那也很好。
答案 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/并尝试在那里复制错误,它应该会为您提供更多信息。