在 Realm 中执行简单的迁移
Performing a simple migration in Realm
我正在为我的下一个 Android 应用程序测试 Realm 数据库,我想做一个简单的迁移。看着文档我有点困惑。
我有这个简单的 class 用户:
public class User extends RealmObject {
@PrimaryKey
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我想(通过迁移)向 table 用户添加一个名为“phoneNumber”的附加字段。我不明白 how/where 我可以启动迁移吗?我在应用程序 onCreate 方法中创建模式,如下所示:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(0)
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);
}
}
和我的迁移 class:
public class MyMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// Migrate to version 1: Add a new class.
// Example:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("User")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}
// Migrate to version 2: Add a primary key + object references
// Example:
// public Person extends RealmObject {
// private String name;
// @PrimaryKey
// private int age;
// private Dog favoriteDog;
// private RealmList<Dog> dogs;
// // getters and setters left out for brevity
// }
if (oldVersion == 1) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}
Log.d("MainActivity","Migration happend!");
}
}
试试这个:
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// This is the current schema version before migration.
if (oldVersion == 0) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}
// More migrations (for version 1->2, 2->3, etc..) in the future.
}
并像下面这样创建 RealmConfiguration
:
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(1) // This the expected schema version after migration.
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);
我正在为我的下一个 Android 应用程序测试 Realm 数据库,我想做一个简单的迁移。看着文档我有点困惑。
我有这个简单的 class 用户:
public class User extends RealmObject {
@PrimaryKey
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我想(通过迁移)向 table 用户添加一个名为“phoneNumber”的附加字段。我不明白 how/where 我可以启动迁移吗?我在应用程序 onCreate 方法中创建模式,如下所示:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(0)
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);
}
}
和我的迁移 class:
public class MyMigration implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// Migrate to version 1: Add a new class.
// Example:
// public Person extends RealmObject {
// private String name;
// private int age;
// // getters and setters left out for brevity
// }
if (oldVersion == 0) {
schema.create("User")
.addField("name", String.class)
.addField("age", int.class);
oldVersion++;
}
// Migrate to version 2: Add a primary key + object references
// Example:
// public Person extends RealmObject {
// private String name;
// @PrimaryKey
// private int age;
// private Dog favoriteDog;
// private RealmList<Dog> dogs;
// // getters and setters left out for brevity
// }
if (oldVersion == 1) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}
Log.d("MainActivity","Migration happend!");
}
}
试试这个:
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
// DynamicRealm exposes an editable schema
RealmSchema schema = realm.getSchema();
// This is the current schema version before migration.
if (oldVersion == 0) {
schema.get("User")
.addField("phoneNumber", long.class, FieldAttribute.REQUIRED);
oldVersion++;
}
// More migrations (for version 1->2, 2->3, etc..) in the future.
}
并像下面这样创建 RealmConfiguration
:
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this)
.schemaVersion(1) // This the expected schema version after migration.
.migration(new MyMigration())
.build();
Realm.setDefaultConfiguration(realmConfiguration);