IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

[SQLite] Delete en Cascade


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut [SQLite] Delete en Cascade
    Bonjour,

    J'ai une base de donnée SQLite assez simple et j'aurais voulu savoir si vous connaissiez une méthode pour faire facilement un delete on cascade ?

    J'ai pris soin de mettre des contraintes d'intégrité sur mes foreign key, mais apparemment lors d'un delete il n'y a pas de delete on cascade ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     ..... 
    FOREIGN KEY (id_person) REFERENCES person(id) ON DELETE CASCADE);
    En cherchant un peu (avant de poser la question) , j'ai trouvé ceci :

    http://stackoverflow.com/questions/2...delete-cascade qui ne fonctionne pas chez moi ...

    Ou ceci : http://developer.android.com/referen...nabled(boolean)
    Mais qui n'est valable qu'à partir de l'API LEVEL 16, ce qui ne fait pas mes affaires (je suis en minSDK 8, maxSDK 16).

    Il me reste évidemment la solution de coder vaillamment en Java des fonctionnalités qui s'assure de celà, mais vu que le travaille est conséquent, je préfère être sûr qu'il n'y a pas une solution plus pratique et efficace.

    Par ailleurs, existe t'il un moyen simple de visualiser ce qui est présent dans ma base de donnée ? Je n'ai rien trouvé de tel ... ce n'est pas très pratique évidemment ...

    D'avance merci pour votre aide.

    Lionel

  2. #2
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 604
    Points : 18 520
    Points
    18 520
    Par défaut
    Bonjour,

    T'as ligne semble correct, à mon avis le problème c'est que tu l'as ajouté dans ta String de création de table, mais tu n'as pas recréé la table.

    Désinstalle ton application et réinstalle là.
    Sinon les changements que tu fais dans tes tables ne sont pas pris en compte.

    Pour voir ta table, il faut trouver le .db dans ton téléphone ou sur l'émulateur et le lire sur ton ordinateur.
    Je ne sais pas exactement comment récupérer la base de données, il faut probablement avoir rooté son téléphone.

    Edit :
    Le plus simple c'est avec un émulateur et Eclipse :
    DDMS -> File Explorer -> data/data/ton package/databases/

    http://developer.android.com/tools/help/adb.html#sqlite

    Après tu pull le dossier databases sur ton PC et tu l'ouvre avec SQLite Manager de Firefox.
    Keith Flint 1969 - 2019

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Points : 87
    Points
    87
    Par défaut
    J'ai résolu le problème.

    Mea culpa, j'avais fait une erreur idiote (oubli) dans la déclaration de mes FK. Du coup il ne "cascadait" pas correctement.

    La solution donc d'Overrider la méthode suivant de votre SQLOpenHelper

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Override
    public void onOpen(SQLiteDatabase db) {
        super.onOpen(db);
        if (!db.isReadOnly()) {
            // Enable foreign key constraints
            db.execSQL("PRAGMA foreign_keys=ON;");
        }
    }
    En prenant soin de bien déclarer vos FK et et d'indiquer qu'elles sont sujette au "Delete on cascade" au moment de la création de vos tables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ..... 
    FOREIGN KEY (id_person) REFERENCES person(id) ON DELETE CASCADE);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Delete en cascade ?
    Par SteelBox dans le forum Access
    Réponses: 13
    Dernier message: 15/06/2005, 00h10
  2. Pb avec ON DELETE/UPDATE CASCADE
    Par trotters213 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 09/03/2005, 11h55
  3. Delete en cascade
    Par defrgly57 dans le forum ASP
    Réponses: 3
    Dernier message: 12/04/2004, 12h13
  4. Delete on cascade avec SQL server
    Par fadoua dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/01/2004, 11h02
  5. delete en cascade
    Par bruno270579 dans le forum Requêtes
    Réponses: 8
    Dernier message: 16/12/2003, 17h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo