在实现SQLiteOpenHelper
时,您将版本参数传递给超类构造函数。这应该是一个静态值,您可以在将来版本的应用程序中更改它(通常,您希望它是您的SQLiteOpenHelper
实现的静态final属性,以及传递给超类构造函数的数据库名称)。
然后,当您要更新数据库时,将增加将在SQLiteOpenHelper
实现中使用的版本参数,然后在onUpgrade()
方法内以编程方式执行想要执行的SQL修改。
说你的数据库开始的表A中第1版,第2版中,表C在3版本,那么你添加的表B,你onUpgrade方法看起来像:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) { // do stuff for migrating to version 2
db.execSQL(...create table B...);
}
if (oldVersion < 3) { // do stuff for migrating to version 3
db.execSQL(...create table C...);
}
}
当父类的构造运行,它将存储的SQLite .db文件的版本与作为参数传递的版本进行比较。如果它们不同,则调用onUpgrade()
。
我应该检查执行情况,但是我认为onUpgrade()
也在onCreate()
之后调用,如果需要创建数据库,并且有一种方法可以确保执行所有升级(例如,强制所有版本号为正整数并初始化版本为0的新创建的数据库)。
完美!感谢您的解释! – Snake
你能提供更详细的解释吗? –