Java Android SQLite:约束失败错误代码19

Java Android SQLite:约束失败错误代码19,java,android,sqlite,constraints,Java,Android,Sqlite,Constraints,我已执行以下sql: 更新记录,列明付款=4,其中列明付款=4 记录的out_付款定义为整数并引用付款(id) 我可以确保4是付款表的ID之一 但我还是得到了失败的 07-31 10:20:36.014: ERROR/Database(19085): Error updating out_payment=4 using UPDATE record_table SET out_payment=? WHERE out_payment = 4 07-31 10:20:45.964: ERROR/And

我已执行以下sql:

更新记录,列明付款=4,其中列明付款=4

记录的out_付款定义为整数并引用付款(id)

我可以确保4是付款表的ID之一

但我还是得到了失败的

07-31 10:20:36.014: ERROR/Database(19085): Error updating out_payment=4 using UPDATE record_table SET out_payment=? WHERE out_payment = 4
07-31 10:20:45.964: ERROR/AndroidRuntime(19085): FATAL EXCEPTION: main
07-31 10:20:45.964: ERROR/AndroidRuntime(19085): android.database.sqlite.SQLiteConstraintException:   error code 19: constraint failed
代码如下:

values.clear();
values.put(RecordSchema.ID_OUT_PAYMENT, oldid);
selection = RecordSchema.ID_OUT_PAYMENT + " = " + oldid + "";
this.db.update(Table.RECORD, values, selection, null);
模式如下所示:

db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE.RECORD
+ " (" + RecordSchema.ID + " INTEGER PRIMARY KEY"
+ "," + RecordSchema.AMOUNT + " TEXT NOT NULL"
+ "," + RecordSchema.ID_CATEGORY + " INTEGER NOT NULL"
+ "," + RecordSchema.ID_SUBCATEGORY + " INTEGER"
+ "," + RecordSchema.DATE + " DATE NOT NULL"
+ "," + RecordSchema.ID_IN_PAYMENT + " INTEGER"
+ "," + RecordSchema.ID_OUT_PAYMENT + " INTEGER"

+ ",FOREIGN KEY(" + RecordSchema.ID_CATEGORY + ") REFERENCES " 
+ IsAiZanTable.CATEGORY + "(" + CategorySchema.ID + ") ON UPDATE CASCADE"

+ ",FOREIGN KEY(" + RecordSchema.ID_SUBCATEGORY + ") REFERENCES "
+ IsAiZanTable.SUBCATEGORY + "(" + SubcategorySchema.ID + ") ON UPDATE CASCADE"

+ ",FOREIGN KEY(" + RecordSchema.ID_IN_PAYMENT + ") REFERENCES "
+ IsAiZanTable.PAYMENT + "(" + PaymentSchema.ID + ") ON UPDATE CASCADE"

+ ",FOREIGN KEY(" + RecordSchema.ID_OUT_PAYMENT + ") REFERENCES "
+ IsAiZanTable.PAYMENT + "(" + PaymentSchema.ID + ") ON UPDATE CASCADE"
                + ");");

db.execSQL("CREATE TABLE IF NOT EXISTS " +Table.PAYMENT
+ " (" + PaymentSchema.ID + " INTEGER PRIMARY KEY"
+ "," + PaymentSchema.KIND + " INTEGER NOT NULL"
+ "," + PaymentSchema.NAME + " TEXT NOT NULL UNIQUE"
+ "," + PaymentSchema.TOTAL + " TEXT NOT NULL"
+ "," + PaymentSchema.HIDDEN + " INTEGER NOT NULL"
+ ");");
有人能帮我解决这个问题吗

实际上我想把id从4更新到5 我可以确保4和5都是付款表的现有ID

但是同样的问题发生了,所以我把4改为4是一样的。 我想如果我能解决4比4的问题,我应该解决4比5的问题

非常感谢你的回答

我找到了答案。 我的一个团队运行以下命令

db.execSQL("PRAGMA foreign_keys = OFF;");
然后将0放入ID\u OUT\u付款记录表中。 0不是付款表的存在id

因此,当我更新ID时,它将触发约束失败

因此,如果我想让我的sql在上面成功运行。 我也需要运行sql

 db.execSQL("PRAGMA foreign_keys = OFF;");
非常感谢大家回复我


谢谢

你为什么要运行那个语句?它没有效果。这就像把每个人的名字都改名为“John Smith”。模式定义是什么?你为什么要把你的付款设定为4,而现在已经是4了?这实际上是一个dup: