问题-当执行强制更新、播放、存储更新时,DB会被擦除/清除。我正在开发一个聊天信使应用程序,它使用Room DB作为本地数据库。每当我使用增加的DB版本进行存储更新时,本地DB就会被清除,消息历史记录也会丢失。
我在用DB房间。我的应用程序是在游戏商店中使用房间DB和版本是4。
我的问题是,我正在更改9个表模式,现在我更新了DB版本,每个表模式都会发生变化。我应该在这里增加DB版本吗?如何在不丢失用户数据的情况下在Play Store中使用Room DB进行强制更新?例如。DB版本为4,我更改了两个表的元素,如下所示。
当两个表被更改时,我是否需要将DB版本增加两倍,还是更改为一个数字增量就可以了?示例:我是否需要DB将版本提高到6,还是保留它5就足够了?
private val mMigrationMessageStatus: Migration = object : Migration(4, 5) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE message_status RENAME TO MessageStatus")
database.execSQL("ALTER TABLE MessageStatus ADD COLUMN userId TEXT NOT NULL default ''")
}
}
private val mMigrationGroupMember: Migration = object : Migration(4, 5) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE group_member RENAME TO GroupMember")
database.execSQL("ALTER TABLE GroupMember ADD COLUMN userId TEXT NOT NULL default ''")
}
}
return Room.databaseBuilder(context, AppDatabase::class.java, dbName)
.allowMainThreadQueries()
.addMigrations(mMigrationMessageStatus,mMigrationGroupMember)
.build()发布于 2022-01-18 01:55:35
从房间版本2.4.0中,您可以轻松地使用autoMigrations进行更新。
数据库类
@Database(
version = 3,
autoMigrations = [
AutoMigration(from = 1, to = 2),
AutoMigration(from = 2, to = 3)
],
.....
)数据类
@Entity(tableName = "user")
data class DataUser(
....
// I added this column, like this
@ColumnInfo(defaultValue = "")var test: String = ""
)见下文参考资料
https://stackoverflow.com/questions/67683405
复制相似问题