So erreichen Sie eine "Vererbung" -Beziehung in der SQLite-Datenbank unter Android

8

Betrachten Sie dieses einfache Modell:

Eine Basisstandorttabelle:

%Vor%

Und eine speziellere Tabelle namens WifiLocation:

%Vor%

Ich möchte, dass dieses Modell eine WifiLocation darstellt, die von BaseLocation erbt. Also habe ich eine REFERENCES -Klausel in die _id -Spalte der wifi_locations -Tabelle wie folgt eingefügt:

%Vor%

Ich versuche eine 1: 1-Beziehung zwischen diesen Tabellen zu erreichen.

Wenn ich eine Zeile in die Tabelle wifi_locations einfügen möchte, füge ich zuerst die entsprechenden Werte (Name, IsInRange) in die Tabelle Locations ein und bekomme die rowId zurück. Dann füge ich den Rest der Daten (ssid) in die Tabelle wifi_locations zusammen mit der rowId als Fremdschlüssel ein.

Also funktioniert das Einfügen in die Location-Tabelle, und ich bekomme eine ID zurück, aber wenn ich versuche, diese ID zu verwenden und sie in die wifi_locations-Tabelle einzufügen, erhalte ich einen SQL Constraint violation -Fehler. Es gibt keine Details darüber, was genau falsch gelaufen ist.

Stimmt etwas mit meinem Schema nicht? Gibt es einen besseren Weg, eine solche Modellierung zu erreichen?

BEARBEITEN:

Der genaue Fehler:

%Vor%     
Avraham Shukron 16.06.2012, 16:58
quelle

1 Antwort

4

Sie sollten FOREIGN KEY in Ihrer zweiten Tabelle mit dem Verweis auf PRIMARY KEY in der Tabelle Locals erstellen. In SQLite FOREIGN KEYS werden unterstützt, aber implizit nicht aktiviert, also müssen Sie sie zuerst aktivieren.

%Vor%

in Ihrer onOpen() -Methode von SQLiteOpenHelper .

Dann sieht Ihr FOREIGN KEY wie folgt aus:

%Vor%

Also das funktioniert alles seit SQLite version 3.6.19 . Weitere Informationen finden Sie unter SQLite Foreign Key Support .

    
Sajmon 16.06.2012, 17:27
quelle