2

私は 1 つの開いているヘルパー クラスで 5 つのテーブルを作成する Android アプリを作成しています。スキーマで ON DELETE CASCADE を使用しているときに問題に直面しています。ON DELETE CASCADE の概念を知っています。ここで、2 つのテーブルのうちの 1 つをコピーします。

private static final String MEDICINE_TABLE  = "create table medicine_details (_mid integer primary key autoincrement, "
                                                    + " medicine_name text, type text, take_with text, m_did integer not null,"
                                                    + "FOREIGN KEY(m_did) REFERENCES doctor_details(did)"
                                                    + " ON DELETE CASCADE" + ");";

private static final String SCH_TAB         = "CREATE TABLE schedule_details(sid INTEGER PRIMARY KEY AUTOINCREMENT, "
                                                    + "medi_stdate TEXT,medi_end_date TEXT,time_sch TEXT,rept TEXT, alarm_id NUMBER, "
                                                    + "u_id integer not null, doc_id integer not null, mid integer not null, "
                                                    + "FOREIGN KEY(u_id) REFERENCES member_details(_id)"
                                                    + " ON DELETE CASCADE,"
                                                    + "FOREIGN KEY(doc_id) REFERENCES doctor_details(did)"
                                                    + " ON DELETE CASCADE,"
                                                    + "FOREIGN KEY(mid) REFERENCES medicine_details(_mid)"
                                                    + " ON DELETE CASCADE" + ");";

薬から削除しようとすると、スケジュール表ではなく薬表からしか削除されません。ここでは、薬テーブルがマスター テーブルで、スケジュール テーブルが子テーブルです。

4

2 に答える 2

4

open()次の例に示すように、メソッドをオーバーライドする必要があります。

    @Override
public void onOpen(SQLiteDatabase db) {
    super.onOpen(db);
    if (!db.isReadOnly()) {
        db.execSQL("PRAGMA foreign_keys=ON;");
    }
}

よろしくお願いします

于 2015-02-01T14:54:18.200 に答える