如何启动onUpgrade调用(SQLiteDatabase db,int oldVersion,int newVersion)?

时间:2015-04-29 16:21:54

标签: android upgrade sqliteopenhelper

我需要将我的android sqlite数据库从版本1升级到版本2.但是我不明白调用public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)是如何启动的?如何以及何时调用此方法?我不明白我在哪里通过版本号2?

[编辑]我想我需要澄清这个问题。这是我的班级:

public class MySQLiteOpenHelper  extends SQLiteOpenHelper {


public MySQLiteOpenHelper(Context context){
    super(context,
            Constants.DB_NAME,
            null,
            1);
}

public MySQLiteOpenHelper(Context context, int version){
    super(context, Constants.DB_NAME, null, version);
}

public MySQLiteOpenHelper(Context context, String name,
                               CursorFactory factory, int version) {
    super(context, Constants.DB_NAME, factory, version);
    // TODO Auto-generated constructor stub
}

public MySQLiteOpenHelper(Context context, String name,
                               CursorFactory factory, int version,
                               DatabaseErrorHandler errorHandler) {
    super(context, Constants.DB_NAME, factory, version, errorHandler);
    // TODO Auto-generated constructor stub
}
public void onCreate(SQLiteDatabase db) {
    // do creation stuff
}
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    // do upgrade stuff
}
}

那么,android如何触发onUpgrade?

2 个答案:

答案 0 :(得分:2)

只需增加DATABASE_VERSION常量,然后实现onUpgrade方法以对应这些更改(例如,创建在版本2中新添加的表)。要理解的一点是,onUpgrade不用于升级数据库版本,而是用于在版本升级后更新数据库以赶上新版本。

请查看我的source了解详情。

答案 1 :(得分:1)

SQLiteOpenHelper构造函数采用名称和版本号,帮助程序将根据需要调用onCreateonUpgrade回调。您需要自己维护数据库版本号,在需要更改架构时碰到版本号。

当您需要将数据库从版本1更新到版本2时,只需更改

super(context, Constants.DB_NAME, null, 1);

super(context, Constants.DB_NAME, null, 2);

然后在你的onUpgrade方法中删除表,添加表或执行从1升级到2所需的任何其他操作。onUpgrade只会在版本之后第一次实例化SQLiteOpenHelper时调用数字变化。