私はSQLiteデータベースをサポートするAndroid 2.2以上のアプリを開発しています。テーブルの作成中に参照整合性制約を定義しようとしています。私はonCreate
のdb.execSQL("PRAGMA foreign_keys=ON;");
とSQLiteOpenHelper
のonOpen
のメソッドを実行することによって、外部キーのサポートも有効にしました。私のテーブルと適切な外部キー参照を設定すると、参照レコードが存在しないテーブルのinsert
行に移動できます。例えば、私は、外部キーが正しくQues_Ansテーブルに設定されている場合とQuestions
テーブル内のレコードがないよう、第二の挿入が失敗している必要がありますAndroid 2.2 + SQLite +参照整合性制約の定義
INSERT INTO Questions VALUES(1, 'Some text');
INSERT INTO Ques_Ans(qid, aid, is_correct) VALUES(20, 1, 0);
を構造
CREATE TABLE Questions(_id integer primary key,question text not null);
CREATE TABLE Ques_Ans(_id integer primary key autoincrement,qid integer not null,
aid integer not null,is_correct integer default 0,
FOREIGN KEY (qid) REFERENCES Questions(_id));
と私のデータを以下のように次ましたid 20
しかし、どういうわけか私のアプリは何のエラーもスローされず、2番目の挿入ステートメントが挿入されます。誰も私に何が間違っているか教えてもらえますか?
アップデート[03日 - 3月-2012]:@Catcall
- とのディスカッションスレッド後
sqlite3
ツールを使用して、エミュレータ上または上のアプリを経由して使用した場合に予想される - 同じこととして
PRAGMA foreign_keys=ON;
外部キー作品に切り替え電話が動作しない insert()
またはexecSQL()
を使用して実行される文を挿入します。いずれも投げられませんforeign key constraint failed
エラーPRAGMA integrity_check
返信ok
です。したがって、データベースは壊れていません。
+1問題を再現するために必要なすべてのSQLが含まれているためです。 –
今後の読者へのお知らせ2015年と同じこと –