java - 替换导致 Android 中的外键不匹配

标签 java android sql sqlite

我在 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);");

如果我做( table 是空的):

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);

它因异常而崩溃 Caused by: android.database.sqlite.SQLiteException: foreign key mismatch: , while compiling: 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);

正常工作,为什么会这样?我该如何解决?提前致谢

最佳答案

table_B 中的外键引用table_A 中的非唯一字段value1。下面演示了它是如何不能工作的:

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> 

这样记录:

http://www.sqlite.org/foreignkeys.html#fk_indexes

关于java - 替换导致 Android 中的外键不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10145270/

相关文章:

java - 如何在JSF中上传图片

java 关于 Thread.interrupted() 的困惑

c# - 单击按钮时如何将数据从 editText.text 传递到 Xamarin Android 中的另一个 Activity

android - 如何降低android中的通话音量(低于0)?

android - 现代浏览器、Android 和 IOS 需要什么样的字体文件?

SQL 在不等于查询中不显示空值?

PHP mysql_query 语法错误?

java - 错误 “can' t 创建 Java VM”尝试使用 Ruby Java Bridge (RJB) gem

java - CardLayout 使用 JMenu 发送错误信息

sql - 链接表和 Ms Access 错误(运行时错误 '3622' : dbSeeChanges/Identity column )