Fremdschlüssel-integritätsregel ON DELETE CASCADE funktioniert nicht in der sqlite-Datenbank auf android
Habe ich "Tage" - Tabelle wie folgt erstellt
"create table days(" +
"day_id integer primary key autoincrement, " +
"conference_id integer , " +
"day_date text, " +
"day_start_time text, " +
"day_end_time text, " +
"day_summary text, " +
"day_description text)";
und ich habe tracks, die Tabelle wie folgt erstellt
CREATE_TABLE_TRACK = "create table track(" +
"track_id integer primary key autoincrement," +
"day_id integer,"+
"track_name text," +
"track_description text," +
" FOREIGN KEY(day_id) REFERENCES days(day_id) ON DELETE CASCADE )";
wie oben gezeigt habe ich foreign key day_id verweisen, auf die day_id der Tabelle Tage...
Also was ich möchte ist wenn ich das lösche ist der Tag dann entsprechende Spur sollte auch gelöscht werden... Aber es hat nicht geschehen, in meinem Fall..
Habe ich mit sqlite version 3.5.9
Und auch ich habe Hinzugefügt 1 Zeile in meine helper Klasse als
> db.execSQL("PRAGMA foreign_keys=ON;");
aber noch nicht funktioniert.. bitte helft mir..
aber wie gesagt, ich habe die Zeile "PRAGMA foreign_keys=ON;" in meiner sqlite-helper-Klasse
InformationsquelleAutor NullPointerException | 2012-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Cascading delete nicht unterstützt, bis Sqlite version 3.6.19, die zunächst auf Android 2.2.
Glücklicherweise gibt es eine alternative.
Können Sie ausführen einer anderen Abfrage, wie dies weiter unten Ihre create table-Abfrage:
Beachten Sie, dass
delete_days_with_track
ist nur ein name beschreiben, was der Auslöser tut, und das ist nur das Muster, das ich verwenden; ich glaube, Sie nennen könnte es alles, was Sie möchten.Komisch. Ich habe 3.7.9 hier auf einem Ubuntu 12.04 Maschinen-und ON DELETE CASCADE funktioniert auch nicht. Seltsam, weder der Auslöser: übersetzt zum Beispiel, behauptet, es "Error: no such column: track.day_id" – obwohl ein
SELECT * FROM track JOIN days ON track.day_id=days.day_id
funktioniert einwandfrei. Ich bin verwirrt.InformationsquelleAutor jkschneider
Entsprechend der SQLite-Dokumentation - Unterstützung für Fremdschlüssel wurde nicht Hinzugefügt, bis 3.6.19.
Verwendung 3.5.9 müssen Sie Ihre cascade-Deletionen in irgendeiner anderen Art und Weise.
Sie müssen nicht manuell löscht, finden Sie unter die trigger-Abfrage unten.
Ah, danke! Ich nutze SQLite, aber ich behaupte nicht ein Experte. Vielen Dank für die Lehre mich, etwas neues.
sehen jkschneider Antwort für eine Lösung
Ich wünschte, ich könnte sagen, ich sei ein Experte, aber ich aufgewickelt tun manuell löscht mehrere Monate, bevor das stolpern über diesen trick irgendwo... Oh die Freude zu gehen clean-up-code.
InformationsquelleAutor Barak