Android Sqlite和外键失败

Add*_*dev 1 java sqlite android

我正在测试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);");
Run Code Online (Sandbox Code Playgroud)

然后我执行:

    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 + ")");
Run Code Online (Sandbox Code Playgroud)

输出是

done(1)
done(-1)
Run Code Online (Sandbox Code Playgroud)

给第二个插入一个外键不匹配

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 (?,?,?)
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

njz*_*zk2 10

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

  • 使用主键作为外键

    FOREIGN KEY(value1fk)REFERENCES table_A(_id)

  • 使用Unique列作为外键

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