Jen*_*iza 2 android realm realm-migration
我是Realm的新手。我正在使用领域作为本地数据库,并且如果应用程序已更新,我也不会丢失数据。我之前做的是
public static Realm getRealmInstanse(){
RealmConfiguration config = new RealmConfiguration
.Builder()
.deleteRealmIfMigrationNeeded()
.build();
try {
return Realm.getInstance(config);
} catch (RealmMigrationNeededException e){
try {
Realm.deleteRealm(config);
//Realm file has been deleted.
return Realm.getInstance(config);
} catch (Exception ex){
throw ex;
//No Realm file to remove.
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我认为我应该做以下事情:
public static Realm getRealmInstanse(){
RealmConfiguration config = new RealmConfiguration
.Builder()
.migration(new RealmMigration() {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
}
})
.build();
return Realm.getInstance(config);
}
Run Code Online (Sandbox Code Playgroud)
我应该在migration()方法内部做什么才能复制数据?那么,关于架构,我应该使用架构版本吗?
更改架构的逻辑是什么?例如,如果由于某种原因我将更改数据库的结构,是否可以只更改migrate()方法中的架构?
我找到了这个示例,但是我实际上不知道它是保存数据还是只是更改架构
if (oldVersion == 0) {
RealmObjectSchema personSchema = schema.get("Person");
// Combine 'firstName' and 'lastName' in a new field called 'fullName'
personSchema
.addField("fullName", String.class, FieldAttribute.REQUIRED)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("fullName", obj.getString("firstName") + " " + obj.getString("lastName"));
}
})
.removeField("firstName")
.removeField("lastName");
oldVersion++;
}
Run Code Online (Sandbox Code Playgroud)
我应该在migration()方法内部做什么才能复制数据?
没什么,数据不会在应用程序更新之间自动保留(前提是您同时也 没有更改架构deleteRealmIfMigrationNeeded())。
如果更改数据库架构并设置了deleteRealmIfMigrationNeeded(),则数据将被删除,以便自动迁移到新架构。
如果更改数据库架构但未设置deleteRealmIfMigrationNeeded(),则必须提供RealmMigration,否则应用程序将崩溃并显示“需要迁移”异常。
例如,如果由于某种原因我将更改数据库的结构,是否可以只更改migrate()方法中的架构?
是。您可以与传递给的DynamicRealm进行交互,@Override public void migrate()以指定迁移到新架构版本所需的更改。
您应该阅读Realm的迁移文档。
旁注:建设正如你在你的代码做RealmConfiguration应该不会做您每次请求一个实例时。相反,最好只在您的Application类中执行一次。另请参阅配置领域。
| 归档时间: |
|
| 查看次数: |
1700 次 |
| 最近记录: |