33 votes

La méthode onUpgrade est-elle jamais appelée?

Est l' onUpgrade méthode de SQLiteOpenHelper jamais appelé? Si oui, quand est-il appelé et par quoi? Ou si elle n'est pas appelée par les développeurs, alors pourquoi est-il là? Ce qui devrait être fait dans la méthode que j'ai vu des exemples où elle tombe tous les tableaux, mais alors un commentaire indique que la suppression de toutes les tables est PAS ce que vous devriez faire.

36voto

factslist.org Points 351

Pour ceux d'entre vous qui souhaitent connaître le moment exact où onUpgrade () est appelé, c'est lors d'un appel à getReadableDatabase () ou getWriteableDatabase ().

Pour ceux qui ne savent pas comment il s'assure qu'il est déclenché ... la réponse est: il est déclenché lorsque la version de la base de données fournie au constructeur de SqLiteOpenHelper est mise à jour. Voici un exemple

 public class dbSchemaHelper extends SQLiteOpenHelper {

private String sql;
private final String D_TAG = "FundExpense";
//update this to get onUpgrade() method of sqliteopenhelper class called
static final int DB_VERSION = 2; 
static final String DB_NAME = "fundExpenseManager";

public dbSchemaHelper(Context context) {
    super(context, DB_NAME, null, DB_VERSION);
    // TODO Auto-generated constructor stub
}
 

maintenant à ... onUpgrade ()

 @Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
    sql = "ALTER TABLE " + fundExpenseSchema.Expense.TABLE_NAME + " ADD COLUMN " + fundExpenseSchema.Expense.FUNDID + " INTEGER";
    arg0.execSQL(sql);
}
 

28voto

dev.serghini Points 1541

si vous utilisez SQLiteOpenHelper, onUpgrade sera appelé chaque fois que vous modifiez la version de la base de données. Il y a une exigence supplémentaire pour que cela fonctionne. Le nom de la base de données doit rester le même.

 Old Version:
dbName = "mydb.db"
dbVersion = 1

New Version:
dbName = "mydb.db"
dbVersion = 2
 

dans le onCreate du fournisseur de contenu, vous créez une instance de SQLiteOpenHelper qui prend ces paramètres. Votre implémentation SQLiteOpenHelper ressemblerait à ceci:

 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
        }

}
 

21voto

ognian Points 6906

Il est appelé lorsque vous construisez un SQLiteOpenHelper avec une version plus récente que la version de la base de données ouverte. La procédure à suivre dépend des modifications apportées à la base de données entre l'ancienne et la nouvelle version. Le seul cas où vous ne supprimez pas une table modifiée est lorsque la modification note plus qu'une colonne ajoutée. Vous pouvez ensuite utiliser l'instruction ALTER TABLE pour ajouter la nouvelle colonne à la signature de table.

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