android - 在Android上升级Realm数据库库版本的正确方法是什么?
问题描述
我们目前使用 Realm 6.x。但是,当尝试将库更新到最新版本 (10.x) 时,应用程序在打开时崩溃。
在应用程序中,领域当前配置为删除模式更改时的所有数据,并在打开时压缩数据库。但即使使用此设置,应用程序也会崩溃。
大版本更新导致崩溃是正常的吗?
正确的升级方法是什么?是否可以在不丢失数据的情况下做到这一点?
解决方案
好的领域数据库遵循这种方法。
RealmConfiguration config = new RealmConfiguration.Builder(context)
.schemaVersion(2) // Must be bumped when the schema changes
.migration(new MyMigration()) // Migration to run
.build();
Realm.setDefaultConfiguration(config);
// This will automatically trigger the migration if needed
Realm realm = Realm.getDefaultInstance();
public class MyMigration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
// Migrate from version 0 to version 1
if (oldVersion == 0) {
RealmObjectSchema userSchema = schema.get("User");
userSchema.addField("testRealm", String.class);
oldVersion++;
}
if (oldVersion == 1) { // ...
// ...
}
}
@Override
public int hashCode() { return MyMigration.class.hashCode(); }
@Override
public boolean equals(Object object) { return object != null && object instanceof MyMigration; }
}
还要考虑
Realm.init(this)设置一个默认的RealmConfiguration并且应该ONLY
在里面调用Application.onCreate
推荐阅读
- javascript - 我无法更新数据表中的数据 - 无法重新初始化 DataTable
- flutter - Web Camera 插件无法在 Flutter 中运行(仅在 iOS 中)
- azure - 使用 terraform 如何将自定义域添加到 Azure 前门
- ethereum - 如何创建一个函数来从以太坊区块链获取在我的 dapp 上注册的整个用户列表?
- azure-active-directory - 在 Outlook 加载项中使用 Microsoft openid 时缺少客户端 ID
- java - Flink 事件时间计时器不会在 testharness 中触发
- github - 每个或整体的 Github 页面限制?
- html - 如何在 vuejs 中悬停时更改 div 卡内容
- excel - 隐藏组的VBA组数据透视表问题
- flutter - 键和常量有什么用