2012-04-13 11 views
1

に外部キーのミスマッチを引き起こし置き換えは、私はアンドロイドで次のデータベースを持っているAndroidの

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)"); 
android.database.sqlite.SQLiteException:外部キーの不一致:

mDb.insertWithOnConflict("table_A", null, values, SQLiteDatabase.CONFLICT_REPLACE); 

それはによって引き起こされる例外でクラッシュの

、コンパイル中:table_A(_id、VALUE1)VALUES INTO INSERT OR REPLACE(2900) 。しかし、交換する代わりに私は挿入を使用します

ContentValues values= new ContentValues(); 
values.put("_id",1); 
values.put("value1",900); 
mDb.insert("table_A", null, values); 

正常に動作します、なぜそれが起こっているのですか?どのように私はそれを解決することができますか?事前に感謝

+0

[同様の質問](http://stackoverflow.com/questions/5208245/what-is-causingを参照します-foreign-key-mismatch-error) – Shehzad

答えて

3

table_Bの外部キーは、value1table_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

関連する問題