我想使用Realm migration
来维护一个表的数据。例如,我想维护Profile User
表的数据并删除表的所有其余部分。
这是我到目前为止所做的。但是数据库中的所有内容都会被删除。
initRealm()
接到onCreate()
的电话
private void initRealm() {
Realm.init(this);
RealmConfiguration configuration = new RealmConfiguration.Builder()
.schemaVersion(3)
.name("sipradi")
.migration(new RealmMigrationClass())
.deleteRealmIfMigrationNeeded()
.build();
Realm.setDefaultConfiguration(configuration);
}
配置类
private class RealmMigrationClass implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 2) {
RealmObjectSchema profileUserSchema = schema.get("ProfileUser");
profileUserSchema.addField("test", String.class);
oldVersion++;
}
}
}
这将删除除 UserProfile 类之外的所有数据
private void initRealm() {
Realm.init(this);
RealmConfiguration configuration = new RealmConfiguration.Builder()
.schemaVersion(3)
.name("sipradi")
.migration(new RealmMigrationClass())
.build();
Realm.setDefaultConfiguration(configuration);
}
private class RealmMigrationClass implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 2) {
RealmObjectSchema profileUserSchema = schema.get("ProfileUser");
profileUserSchema.addField("test", String.class);
// Delete all other data than `ProfileUser`
for (RealmObjectSchema classSchema : schema.getAll()) {
if (classSchema.getClassName().equals("ProfileUser")) {
continue;
}
realm.delete(classSchema.getClassName());
}
oldVersion++;
}
}
}