Room Database schema update without data loss(在不丢失数据的情况下更新聊天室数据库模式)
本文介绍了在不丢失数据的情况下更新聊天室数据库模式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我用Kotlin用Android开发了一个应用程序,它可以在Playstore上买到。我已经使用Room数据库来存储值。我有以下问题:
数据库架构现在更改了,我需要如何处理。我参考了下面的教程,但仍然不清楚如何处理迁移中的模式更改。 访问https://developer.android.com/training/data-storage/room/migrating-db-versions.html
如何使用PlayStore版本测试当前应用程序?
提前感谢您的帮助。
推荐答案
这是一个相当复杂的问题,但基本上您有两种策略:
fallbackToDestructiveMigration
->实现简单,但是一旦应用程序更新,您的用户将丢失他们的数据- 提供
Migration
策略(最好)
案例1-FallbackToDestructiveMigration
在数据库初始化中,只需在数据库构建器上调用fallbackToDestructiveMigration
:
database = Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.fallbackToDestructiveMigration()
.build();
在这种情况下,由于您已经更新了数据库版本(假设从版本1更新到版本2),Room找不到任何迁移策略,因此将回退到破坏性迁移,表将被删除。
案例2-智能迁移
假设您有一个名为"Users"的表,并且假设您在数据库的版本2中向该表添加了一列。让我们将此列称为"USER_SCORE",您应该实现migrate
类的migrate
接口,以便将"Users Version 1"模式更新为"Users Version 2"模式。为此,您需要一个alter table
,您可以直接在migrate
方法中编写它:
static final Migration MIGRATION_1_2 = new Migration(1, 2) {
@Override
public void migrate(SupportSQLiteDatabase database) {
// Your migration strategy here
database.execSQL("ALTER TABLE Users ADD COLUMN user_score INTEGER")
}
};
database = Room.databaseBuilder(context.getApplicationContext(),
UsersDatabase.class, "Sample.db")
.addMigrations(MIGRATION_1_2)
.build();
此处提供更多参考资料:
- https://medium.com/androiddevelopers/understanding-migrations-with-room-f01e04b07929
- https://medium.com/@elye.project/android-sqlite-database-migration-b9ad47811d34
这篇关于在不丢失数据的情况下更新聊天室数据库模式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
织梦狗教程
本文标题为:在不丢失数据的情况下更新聊天室数据库模式


基础教程推荐
猜你喜欢
- iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法 2022-01-01
- iOS4 创建后台定时器 2022-01-01
- 如何从 logcat 中删除旧数据? 2022-01-01
- AdMob 广告未在模拟器中显示 2022-01-01
- Android:getLastKnownLocation(LocationManager.NETWORK_PROVIDER 2022-01-01
- Cocos2d iPhone 非矩形精灵触摸检测 2022-01-01
- navigator.geolocation.getCurrentPosition 在 Android 浏览器上 2022-01-01
- NSString intValue 不能用于检索电话号码 2022-01-01
- 通过重定向链接在 Google Play 中打开应用 2022-01-01
- libGDX 从精灵或纹理中获取像素颜色 2022-01-01