实现时SQLiteOpenHelper
,将版本参数传递给超类构造函数。这应该是一个静态值,您可以在应用程序的未来版本中更改(通常您希望这是您的SQLiteOpenHelper
实现的静态最终属性,以及您传递给超类构造函数的数据库名称)。
然后,当您想要更新数据库时,增加将在您的SQLiteOpenHelper
实现中使用的版本参数,并以编程方式在方法内部执行您打算执行的 SQL 修改onUpgrade()
。
假设您的数据库从版本 1 中的表 A 开始,然后您在版本 2 中添加了表 B,在版本 3 中添加了表 C,您的 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 创建的数据库)。