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.
Réponses
Trop de publicités?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);
}
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
}
}
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.