什么时候需要进行数据库版本升级?
与SQLite类似,在数据表的结构需要修改的时候(例如:增加新的字段),需要进行数据库的版本升级。
如何处理本地数据库版本升级?
1.必须修改配置,更新数据库版本号
RealmConfiguration config=new RealmConfiguration.Builder()
.schemaVersion(2)// Must be bumped when the schema changes
.migration(newMyMigration())// Migration to run instead of throwing an exception
.build()
2.更新数据库表的数据结构
注意:migrate方法在本地数据库进行迁移时会自动回调一次,这里的数据库迁移需要考虑一个很重要的问题就是,“跨版本的迁移”,例如,从version1需要直接升级到version4。下面的代码很好地解决了这个问题,请认真阅读代码。
// Example migration adding a new 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("Person")
.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 dogs;
// // getters and setters left out for brevity
// }
if(oldVersion==1){
schema.get("Person")
.addField("id",long.class,FieldAttribute.PRIMARY_KEY)
.addRealmObjectField("favoriteDog",schema.get("Dog"))
.addRealmListField("dogs",schema.get("Dog"));
oldVersion++;
}
}
}
附官方网站地址:https://realm.io
网友评论