升级注意事项:
1.手动升级,在低于2.4.0版本升级是需要手动升级的 主要缺陷是:1.需要自己手写sql;2.面对大量的新增字段的话会很繁琐。 具体可以查看官方说明:手动定义迁移
Kotlin写法的话,需要注意点是:entity中指定的字段类型是否可为空,若不为空,则在sql语句需要给个默认值例如添加一个interge类型:
entity:
@ColumnInfo(name = "step_status", defaultValue = "0")
val status: Int,
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
//FRUIT 表 新增一列,不为null,默认初始值为0
database.execSQL("ALTER TABLE step_table ADD COLUMN step_status INTEGER NOT NULL DEFAULT 0")
}
}
2.自动迁移
注意:Room 在 2.4.0-alpha01 及更高版本中支持自动迁移。如果您的应用使用的是较低版本的 Room,则必须。
官方示例:
// Database class before the version update.
@Database(
version = 1,
entities = [User::class]
)
abstract class AppDatabase : RoomDatabase() {
...
}
// Database class after the version update.
@Database(
version = 2,
entities = [User::class],
autoMigrations = [
AutoMigration (from = 1, to = 2)
]
)
abstract class AppDatabase : RoomDatabase() {
...
}
注意:需要在gradle配置下schemas android defaultConfig下配置
javaCompileOptions {
annotationProcessorOptions {
arguments += ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
android下添加
sourceSets {
androidTest.assets.srcDirs += files("$projectDir/schemas".toString())
}
一般的流程: 1.新增字段的话,直接在entity里面新建字段 2.version升高 3.指定升级版本:AutoMigration(from = x, to = y)
升级表也是类似:直接新建表其他操作跟字段一致。
暂时记录到这里。