SqliteConstraintException Android

时间:2012-10-24 16:45:23

标签: android sqlite exception

我遇到了SqliteConstraintException的问题。 我的数据库就像那样

private static final String CREATE_TABLE_1 =
   "create table table_1 (uid integer primary key autoincrement, "
+ table_1.c1 + " TEXT,"
+ table_1.c2 + " integer,"
+ table_1.c3 + " TEXT," 
+ table_1.c4 + " TEXT,"
+ table_1.c5 + " integer);";

private static final String CREATE_TABLE_2 = 
        "create table table_2 (uid integer primary key autoincrement, "
+ table_2.c1 + " TEXT,"
+ table_2.c2 + " integer,"
+ table_2.c3 + " TEXT);";

private static final String CREATE_TABLE_3 = 
        "create table table_3 (uid integer primary key autoincrement, "
        + "uid_table_1 integer, "
        + "uid_table_2 integer, "

+ "FOREIGN KEY(uid_table_1) REFERENCES table_1(uid) ON DELETE CASCADE, " 
+ "FOREIGN KEY(uid_table_2) REFERENCES table_2(uid) ON DELETE CASCADE);";

private static final String CREATE_TABLE_4 = 
        "create table table_4 (uid integer primary key autoincrement, "
+ "uid_table_2 integer,"
+ "FOREIGN KEY(uid_table_2) REFERENCES table_2(uid) ON DELETE CASCADE);";

我在SQLiteOpenHelper中使用以启用外键约束

@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
if (!db.isReadOnly()) {
// Enable foreign key constraints
db.execSQL("PRAGMA foreign_keys=ON;");
}

但是当我想删除table_2的行时,我得到了SqliteConstraintException。 你能帮帮我吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我看起来大多数表都互相引用。如果要删除表2中用作其他表中的外键的行,则需要删除引用它的记录。所以删除表3和表4中的记录,这些记录对你要删除的行有一个外键引用,然后对该行进行删除。