一、数据库升级
数据库升级在每一个版本上新的时候会经常遇到,一般是表字段进行了修改。一般新增一些字段的情况比较多。以下四步是完成数据库升级的基本步骤。
二、代码实现
1、添加Entity字段
原Entity
@PrimaryKey
var id: Int,
var name: String,
var gender: Int
添加一个String类型的字段:
@Entity
data class User(
@PrimaryKey(autoGenerate = true)
var id: Int,
var name: String?,
var gender: Int,
var hobby:String?
)
2、修改AppDataBase的版本号
原来的版本号:
@Database(entities = [User::class], version = 1)
修改后的版本号:
@Database(entities = [User::class], version = 2)
注意:version的版本号要和下面提到的MIGRATION要对应上!
3、添加MIGRATION
添加一个MIGRATION,并且添加上修改数据库表字段的sql代码:
private val MIGRATION_1_2 = object : Migration(1, 2) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE User ADD COLUMN hobby TEXT")
}
}
注意: Migration(1, 2)代表数据库版本从1升级到2,和前一步修改数据库版本对应。
4、将添加的MIGRATION添加到数据构造中去
fun getInstance(context: Context): AppDataBase {
if (instance == null) {
synchronized(AppDataBase::class.java) {
instance = Room.databaseBuilder(
context.applicationContext,
AppDataBase::class.java,
"app_db"
)
// MIGRATION添加到这里
.addMigrations(MIGRATION_1_2)
.allowMainThreadQueries()
.build()
}
}
return instance!!
}
// MIGRATION
private val MIGRATION_1_2 = object : Migration(2, 3) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE User ADD COLUMN hobby TEXT")
}
}
如果有多个MIGRATION则往后添加:
.addMigrations(MIGRATION_1_2, MIGRATION_3_4, MIGRATION_4_5, MIGRATION_5_6, MIGRATION_6_7)