我在Android中有以下数据库:
Table A: [_id, value1]
Table B: [_id, fk_tablea, value2]
使用代码:
db.execSQL("CREATE TABLE IF NOT EXISTS table_A ( "
+ "_id long primary key , value1 long );");
db.execSQL("CREATE TABLE IF NOT EXISTS table_B ( "
+ "_id long primary key ,fk_tablea long , value2 long,"
+ "FOREIGN KEY (fk_tablea) REFERENCES table_A (value1) ON DELETE CASCADE);");
如果我做(表空了):
ContentValues values= new ContentValues();
values.put("_id",1);
values.put("value1",900);
mDb.replace("table_A", null, values);
或
mDb.execSQL("INSERT OR REPLACE INTO table_A(_id,value1) VALUES (1,900)");
的
mDb.insertWithOnConflict("table_A", null, values, SQLiteDatabase.CONFLICT_REPLACE);
崩溃时出现异常引起:android.database.sqlite.SQLiteException:外键不匹配:,同时编译:INSERT OR REPLACE INTO table_A(_id,value1)VALUES(2,900) 。但如果不是替换我使用插入
ContentValues values= new ContentValues();
values.put("_id",1);
values.put("value1",900);
mDb.insert("table_A", null, values);
正常工作,为什么会这样?我该如何解决?提前致谢
答案 0 :(得分:3)
table_B
中的外键是指value1
中的非唯一字段table_A
。以下说明了这不起作用:
sqlite> pragma foreign_keys=1;
sqlite> create table foo (a int, b int);
sqlite> create table bar (c int, d int, foreign key (c) references foo(b));
sqlite> insert into foo values (1,1);
sqlite> insert into bar values (1,1);
Error: foreign key mismatch
sqlite> create unique index idx1 on foo(b);
sqlite> insert into bar values (1,1);
sqlite>
以这种方式提供文档: