채팅 행을 삭제할 때 모든 메시지 행과 해당 id_chat
으로 생성 된 모든 관계 행을 삭제하려고합니다. 이 시점에서 레지스터를 추가하는 데 문제가 없지만 릴레이션과 메시지 레지스터는 자동으로 사라지지 않으므로 삭제하는 데 문제가 없습니다.캐스케이드에서 삭제, FOREIGN KEY 제약 조건 오류, sqlite
public void onOpen(SQLiteDatabase db){
super.onOpen(db);
db.execSQL("PRAGMA foreign_keys = ON");
}
편집 : 그리고 지금 관계의 첫 번째 레지스터가 추가되었다 (1,17) I에 유래에서 읽을
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
를 오버라이드 두 번째 것 (3,17)은 나에게 로컬 db에 오류를 준다 :
Error inserting id_viaje=3 id_chat=17 android.database.sqlite.SQLiteConstraintException: FOREIGN KEY constraint failed
왜이 오류가 발생 했습니까? 계단식에서 삭제하는 방법? 그래서 테이블 Relations
에서이 외래 키 선언이 유효하지 않습니다 감사
네 말이 맞아. 내가 편집 했어. 감사. 관계에있는 레지스터를 생성하는 데 여전히 문제가있는 경우, 내가 작성한 모든 채팅은 관계에 최소한 2 개의 레지스터를 작성해야하며, 첫 번째 삽입 만 할 수 있습니다. – lulu666