91 votes

Contraintes de clé étrangère dans Android en utilisant SQLite ? sur Delete cascade

J'ai deux tables: les traces et les waypoints, une piste peut avoir de nombreux points, mais un point est attribué pour seulement 1 piste.

Dans les points de façon de de table j'ai une colonne appelée "trackidfk", qui insère le track_ID une fois qu'une piste est faite, cependant je n'ai pas d'installation les contraintes de Clé Étrangère sur cette colonne.

Quand je supprimer une piste je veux supprimer le attribué des points de cheminement, est-ce possible?. J'ai lu sur l'utilisation des Déclencheurs, mais je ne pense pas qu'ils soient pris en charge dans Android.

Créer des waypoints de la table:

public void onCreate(SQLiteDatabase db) {
    db.execSQL( "CREATE TABLE " + TABLE_NAME 
                + " (" 
                + _ID         + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
                + LONGITUDE   + " INTEGER," 
                + LATITUDE    + " INTEGER," 
                + TIME        + " INTEGER,"
                + TRACK_ID_FK + " INTEGER"
                + " );"
              );

    ...
}

237voto

Phil Points 2076

Des contraintes de clé étrangère avec sur delete cascade sont supportées, mais vous devez les activer.
Je viens d’ajouter ce qui suit à mon SQLOpenHelper, qui semble faire l’affaire.

J’ai déclaré ma rubrique référencement comme suit.

56voto

e.shishkin Points 419

Depuis android 4.1 (API 16) SQLiteDatabase soutien, de :

26voto

malcolm Points 11

Comme le dit le post de e.shishkin du API 16 vers le haut, vous devez activer les contraintes de clé étrangère dans la à l’aide de la méthode du

4voto

Thorsten Dittmar Points 28193

Je ne pense pas que SQLite supporte cela out of the box. Ce que je fais dans mes apps est :

  1. Créer la transaction
  2. Supprimer les données de détail (points de cheminement dans votre exemple)
  3. Supprimer les données de base (pistes dans votre exemple)
  4. Validation de transaction sur le succès

De cette façon, je ne sais pas que soit toutes les données sont supprimées ou none.

4voto

Dave.B Points 3021

Les déclencheurs sont pris en charge par android et que type de cascade supprime n’est pas supporté par sqlite. Un exemple d’utilisation des déclencheurs sur android peut être trouvé ici. Bien que l’utilisation des transactions selon Thorsten est probablement tout aussi facile comme un déclencheur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X