小编Fal*_*ich的帖子

带有NULLABLE外键的SQLite

我遇到导致SQLiteConstraintException的NULLABLE外键问题.使用以下命令启用外键:

PRAGMA foreign_keys = ON
Run Code Online (Sandbox Code Playgroud)

使用以下语句创建表:

CREATE TABLE conversation (_id INTEGER PRIMARY KEY);
CREATE TABLE message (_id INTEGER PRIMARY KEY, conversation_id INTEGER, FOREIGN KEY(conversation_id) REFERENCES conversation (_id) ON DELETE CASCADE);
Run Code Online (Sandbox Code Playgroud)

这些陈述被贬低以改善阅读.

如您所见,外键'conversation_id'被声明为NULLABLE,因此我不会强制将每条消息链接到一个对话(例如,当创建一个没有相应对话的草稿消息时).

当我尝试使用conversation_id插入新消息时,一切都很顺利.当我尝试没有时,我得到以下错误:

11-07 16:44:55.190  20582-20582/com.miawe.miabe E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.miawe.miabe, PID: 20582
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.miawe.miabe/com.miawe.miabe.gui.MainActivity}: android.database.sqlite.SQLiteConstraintException: foreign key constraint failed (code 19)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
        at android.app.ActivityThread.access$800(ActivityThread.java:135)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:136)
        at android.app.ActivityThread.main(ActivityThread.java:5017)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) …
Run Code Online (Sandbox Code Playgroud)

sqlite android nullable constraints foreign-keys

6
推荐指数
1
解决办法
3934
查看次数

标签 统计

android ×1

constraints ×1

foreign-keys ×1

nullable ×1

sqlite ×1