gpt4 book ai didi

java - Android Sqlite 和外键失败

转载 作者:行者123 更新时间:2023-11-29 09:49:48 24 4
gpt4 key购买 nike

我正在测试 Android 中的外键,但遇到了我不明白的问题:

创建表(使用硬编码值)

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 , value1fk long , value2 long,"+
"FOREIGN KEY (value1fk) REFERENCES table_A (value1) ON DELETE CASCADE);");

然后我执行:

    ContentValues values = new ContentValues();
values.put("_id", 1);
values.put("value1", 200);
long result = mDb.insert("table_A", null, values);
Log.e("","done (" + result + ")");


values = new ContentValues();
values.put("_id", 1);
values.put("value1fk", 200);
values.put("value2", 10);
result= mDb.insert("table_B", null, values);
Log.e("","done (" + result + ")");

输出是

done(1)
done(-1)

给第二个插入外键不匹配

E/SQLiteDatabase(25476): Error inserting _id=1 value1fk=200 value2=10
E/SQLiteDatabase(25476): android.database.sqlite.SQLiteException: foreign key mismatch: , while compiling: INSERT INTO table_B(_id,value1fk,value2) VALUES (?,?,?)

为什么会这样?

最佳答案

根据外键的 sqlite 文档 http://www.sqlite.org/foreignkeys.html你需要:

  • 使用主键作为外键

    FOREIGN KEY (value1fk) REFERENCES table_A (_id)

  • 使用唯一列作为外键

    CREATE TABLE IF NOT EXISTS table_A (_id long primary key , value1 long UNIQUE);

关于java - Android Sqlite 和外键失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10144096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com