1

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

コンパイル中: 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);

正しく動作しますが、なぜそれが起こっているのですか? どうすれば解決できますか?前もって感謝します

4

1 に答える 1

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> 

このようにドキュメント:

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

于 2012-04-13T19:45:18.650 に答える