升级数据库版本时,为了迁移已有的用户数据,要定义版本之间的迁移路径,如1->2
val MIGRATION_1_2: Migration = object: Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
//增加表字段
database.execSQL("ALTER TABLE pay "
+ "ADD COLUMN discount TEXT NOT NULL DEFAULT '1'")
//新建表
database.execSQL("CREATE TABLE `apay` (`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, " +
"`bill_code` TEXT NOT NULL" +
")")
}
}
使用迁移路径:
@JvmStatic
fun getInstance(context: Context): AppDatabase {
if (mInstance == null) {
synchronized(DatabaseHelper::class.java) {
if (mInstance == null) {
mInstance = Room.databaseBuilder(
context,
AppDatabase::class.java,
DB_NAME
).addMigrations(MIGRATION_21_22)
.fallbackToDestructiveMigration() //没有定义迁移路径的增量迁移时,直接删除旧版数据
.allowMainThreadQueries() //可以在主线程操作
.build()
}
}
}
return mInstance
}
官方文档:迁移 Room 数据库