【问题标题】:Android SQLite : constraint failed error code 19Android SQLite:约束失败错误代码 19
【发布时间】:2011-07-31 14:44:35
【问题描述】:

我已经执行了以下sql:

更新记录集 out_payment=4 where out_payment=4;

记录的 out_payment 定义为整数并引用 Payment(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 的问题。

非常感谢您的回答!

【问题讨论】:

  • 为什么要运行该语句?它没有效果。这就像将每个名字为 John Smith 的人重命名为“John Smith”。
  • 架构定义是什么?你为什么要尝试将 out_payment 设置为 4 而它已经是 4?
  • 这实际上是一个重复:stackoverflow.com/questions/6564215/…

标签: java android sqlite constraints


【解决方案1】:

我找到了答案。 我的一个团队执行以下操作

db.execSQL("PRAGMA foreign_keys = OFF;");

然后将 0 放入记录表的 ID_OUT_PAYMENT 中。 0 不是 PAYMENT 表的存在 ID。

所以当我更新 ID_OUT_PAYMENT 时,它会触发约束失败。

所以如果我想让上面的 sql 成功运行。 我也需要运行sql。

 db.execSQL("PRAGMA foreign_keys = OFF;");

非常感谢大家回复我!!

谢谢!

【讨论】:

    猜你喜欢
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多