チャット行を削除すると、すべてのメッセージ行と、そのid_chat
で作成されたすべてのリレーション行が削除されます。私はこの時点ではレジスタを追加することに問題はありませんが、リレーションとメッセージレジスタは自動的に消えないので削除しています。削除カスケードで、エラーFOREIGN KEY制約が失敗しました。sqlite
public void onOpen(SQLiteDatabase db){
super.onOpen(db);
db.execSQL("PRAGMA foreign_keys = ON");
}
編集: そして今、関係の最初のレジスタが追加されました(1,17)私はstackoverflowの中で読んで
public class DatabaseHelper extends SQLiteOpenHelper {
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE Chats (_id INTEGER PRIMARY KEY AUTOINCREMENT, A1 DATE)");
db.execSQL("CREATE TABLE Messages (_id INTEGER PRIMARY KEY AUTOINCREMENT, FOREIGN KEY(id_user) REFERENCES Users(id_user), FOREIGN KEY(id_chat) REFERENCES Chats(_id) ON DELETE CASCADE)");
db.execSQL("CREATE TABLE Relations (id_viaje INTEGER, id_chat INTEGER, PRIMARY KEY (id_chat, id_viaje), FOREIGN KEY (id_chat) REFERENCES Chats(_id) ON DELETE CASCADE, FOREIGN KEY (id_viaje) REFERENCES Viajes(_id))");
db.execSQL("CREATE TABLE Users (_id INTEGER AUTO_INCREMENT, id_user TEXT PRIMARY KEY, name TEXT)");
db.execSQL("CREATE TABLE Viajes (_id INTEGER PRIMARY KEY AUTOINCREMENT, date DATE, activate BOOLEAN, id_user TEXT not null)");
}
}
は、だから私は、外部キーを活性化するために方法onOpen
をオーバーライド2番目のもの(3,17)はローカルデータベースにエラーを表示します:
Error inserting id_viaje=3 id_chat=17 android.database.sqlite.SQLiteConstraintException: FOREIGN KEY constraint failed
なぜこのエラーが発生しますか?どのようにカスケードで削除するには?だから、テーブルRelations
でこの外部キーの宣言は有効ではありません おかげ
あなたが正しいです、私はそれを編集しました。ありがとう。リレーションシップでレジスタを作成する際に問題が発生しても、作成するすべてのチャットでリレーションを2つ以上作成する必要があります。最初のチャンクしか挿入できません。 – lulu666