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 OnCreate OnUpgarde


Sujet :

Android

  1. #1
    Membre du Club
    Homme Profil pro
    Developpeur Android
    Inscrit en
    Juin 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 65
    Points : 57
    Points
    57
    Par défaut SQLite OnCreate OnUpgarde
    Bonsoir, je voulais avoir quelques précisions sur les base de données SQLite android.

    Je pense avoir compris que pour lancer l'objet base de données, il faut faire
    dans lequel j'ai l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    db = DBHelper.getWritableDatabase();
    Cette instruction appelle soit la méthode onCreate() soit la méthode OnUpgrade().
    J'ai aussi compris que la méthode appelée dépend du numéro de version de la bd.

    A partir de la, quand dans mon appli, quand j'ouvre la BD avec db.open(), cela lance la méthode onCreate().

    Si je ferme la BD avec db.close() et que derrière je refait db.open(), quelle méthode sera appelée : onCreate() ou onUpgrade() ?
    Sans avoir changé de numéro de version ?
    En ayant changé le numéro de version ?
    Ou le changer ?
    La méthode onUpgrade sert elle pour l'ouverture et la fermeture consécutive de la BD dans la même execution de l'appli (sans fermer l'appli) ou son but est de s'executer quand on relance l'appli après l'avoir fermer ??

    Cela fait beaucoup de question je sais, j'ai lu une dizaine de tuto autant français que anglais et cela n'est jamais écrit clairement.

    EDIT : une autre question

    Quand l'instruction est exécutée, la méthodé onCreate() est invoquée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void onCreate(SQLiteDatabase db) 
            {
            	System.out.println(" OnCreate ");
                    db.execSQL(DATABASE_CREATE);
                    db.execSQL(INSERT1);
        		db.execSQL(INSERT2);
        		db.execSQL(INSERT3);
        		Log.w("TEST : ", "PREMIERE CREATION DE LA BASE !");
            }
    J'ai donc 3 enregistrements dans ma BD.
    Imaginons que je fasse 2 insert en plus dans la BD, je me retrouve normalement avec 5 enregistrements.
    Je .close() la BD
    Je la réouvre, si onCreate() est utilisée, que se passe-t-il ?
    Si onUpgrade() est utilisée,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
            {
            	System.out.println(" OnUpgrade ");
                    Log.w(TAG, "Upgrading database from version " + oldVersion 
                      + " to "
                      + newVersion + ", which will destroy all old data");
                    db.execSQL("DROP TABLE IF EXISTS activites");
                    onCreate(db);
            }
    j'efface la BD (je me retrouve donc avec 0 enregistrements) et j'appele onCreate() qui me refait les 3 enregistrements de la méthode.
    Je ne comprend donc pas en quoi appeler la méthode onUpgrade() permet de mettre à jour la BD, selon moi, elle fait juste un reset de la BD.....
    Je ne comprend pas....


    Merci d'éclairer mes lanternes.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2013
    Messages : 70
    Points : 113
    Points
    113
    Par défaut
    onCreate() sera appelée uniquement si bdd n'existe pas et onUprade uniquement si les version de bdd sont différentes.

    normalement ça répond à toutes tes questions.

  3. #3
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par winchester Voir le message
    j'efface la BD (je me retrouve donc avec 0 enregistrements) et j'appele onCreate() qui me refait les 3 enregistrements de la méthode.
    Je ne comprend donc pas en quoi appeler la méthode onUpgrade() permet de mettre à jour la BD, selon moi, elle fait juste un reset de la BD.....
    Je ne comprend pas....
    parce que tu l'as implémenté comme cela.... voici ce que fais mon onUpgrade():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
        int version = oldVersion;
        while (version < newVersion) {
            Table1DAO.upgradeTable(db,version);
            Table2DAO.upgradeTable(db,version );
            ...
            ++version ;
        }
    }
    et dans les DAOs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    public static void upgradeTable(SQLiteDatabase db, int version)
    {
        switch (version) {
            case 2:
                db.execSQL("ALTER TABLE ....");
                break;
            case 3:
                db.execSQL("ALTER TABLE ....");
                break;
            case 4:
                db.execSQL("ALTER TABLE ....");
                break;
            default: break;
        }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre du Club
    Homme Profil pro
    Developpeur Android
    Inscrit en
    Juin 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Developpeur Android
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 65
    Points : 57
    Points
    57
    Par défaut
    OK, merci pour ces réponses, je m'en sort mieux.

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

Discussions similaires

  1. qui connait sqlite ?
    Par Emmanuel Lecoester dans le forum SQLite
    Réponses: 23
    Dernier message: 19/02/2010, 13h44
  2. SQLITE
    Par Betatesteur dans le forum SQLite
    Réponses: 2
    Dernier message: 24/06/2005, 12h41
  3. [SQLite]éliminer un motif dans des champ TEXT
    Par Invité(e) dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/05/2005, 17h44
  4. base de données en sqlite
    Par Cyrillou dans le forum SQLite
    Réponses: 1
    Dernier message: 12/05/2005, 15h37
  5. debuter en SQLite
    Par venomelektro dans le forum SQLite
    Réponses: 4
    Dernier message: 08/12/2004, 19h17

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