9
votes

ONUPGRADE () Base de données SQLite à Android

J'ai créé une application Android qui, chèque au démarrage s'il existe une nouvelle version de l'application. Si oui, l'application télécharge le nouveau fichier APK et sur l'installation de nouveaux APK. Mon application utilise la DB SQLite. Mais cette dB, d'une version à d'autres peut changer. Je pense que je dois utiliser la méthode: xxx

mais je ne sais pas exactement comment l'utiliser.

Quand je démarre l'application, j'utilise ce code pour Crète Base de données (si elle n'existe pas): xxx

Que dois-je modifier si je veux utiliser onpgrade () méthode? Et quand dois-je l'appeler?


0 commentaires

3 Réponses :


20
votes

onpgrade () est appelé (vous ne l'appelez pas vous-même) lorsque la version de votre DB a changé, ce qui signifie que la structure de table sous-jacente a changé, etc.

En général, cela signifie que le système d'exploitation vous dit " hey, vous avez demandé la version de la structure de la base de données 10, mais j'ai trouvé que nous avons eu quelque chose de plus vieux ici, c'est donc votre chance de résoudre ce problème avant de commencer à utiliser la base de données (et potentiellement Crash dû à une inadéquation de structure) ".

Dans cette méthode, vous devriez faire tout ce qui est nécessaire à, eh bien .. Mettez à niveau une structure de mise à niveau de votre ancienne base de données pour structurer les exigences de version en cours de correspondance telles que l'ajout / des colonnes d'abandon, la convertissage de la ligne de rangée ou même l'abandon de l'ancien dB complètement et la créer à partir de zéro. - Pour Android, peu importe ce que vous faites ici - il s'agit simplement d'une sorte de rappel d'urgence pour votre code pour faire le travail nécessaire (le cas échéant). Vous devez être conscient que les utilisateurs ne peuvent pas mettre à jour fréquemment, vous devez donc toujours gérer la mise à niveau de la version X à Y sachant que X peut ne pas être égal à I.e. (Y-1).


3 commentaires

Je remarque que Onpgrade prend deux paramètres INT: Ouvrversion et Newversion. Donc, si j'ai dans mon application, la base de données de la version 1 et de l'APK téléchargé contient une base de données à la version 2, cela permet au système d'appeler la méthode automatiquement sur upgrade ()?


Comme suggéré dans code.google.com/p/openintents/source/browse/trunk/notepad/... Je peux utiliser le commutateur (Olvversion) pour prendre en compte les différents changements à utiliser pour chaque ancienne version? est-ce correct? En outre, si, dans une nouvelle version de DB, j'ajoute une nouvelle colonne dans une table, je dois également modifier l'Oncreate, afin de créer la table avec la nouvelle colonne supplémentaire? Cela a probablement un sens si aucune application n'est encore installée et que la nouvelle DB doit être créée. Mon hypothèse est-elle correcte?


Oui. Le numéro de version est juste int , afin que vous puissiez faire un commutateur régulier / case . Ce qui est important, c'est que vous devez par exemple la mise à niveau de la version 2 à 3 mais aussi de 1 à 3 (je voudrais probablement simplement vous en boucher et la mise à niveau de 1 à 2, puis de 2 à 3), ce qui serait probablement Soyez plus simple que de manipuler la mise à jour directe de 1 à 3 (ou de 1 à 80 pour donner une perspective plus large)



5
votes

Si vous utilisez le SQLITEOPENHELPER, l'ONUPGrade sera appelé chaque fois que vous modifiez la version DB. Il y a une exigence supplémentaire à laquelle cela fonctionne. Le nom de base de données doit rester identique.

public static final class MySQLiteOpenHelper extends SQLiteOpenHelper {

        public MySQLiteOpenHelper(Context context, int dbVersion, String dbName) {
            super(context, dbName, null, dbVersion);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            //Code to create your db here
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // Code to upgrade your db here
        }

}


0 commentaires

3
votes

j'ai trouvé cela très utile https://thebhwgroup.com/blog/how-android-sqlite-onupgrade

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
         db.execSQL(DATABASE_ALTER_TEAM_1);
    }
    if (oldVersion < 3) {
         db.execSQL(DATABASE_ALTER_TEAM_2);
    }
}


0 commentaires