Android使用realm数据库升级(跨版本兼容),迁移最佳解决

什么时候需要进行数据库版本升级?

与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

你可能感兴趣的:(Android使用realm数据库升级(跨版本兼容),迁移最佳解决)