我是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. } } }
现在我认为我应该做以下事情:
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); }
我应该在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++; }
Tim.. 5
我应该在migration()方法内部做什么才能复制数据?
没什么,数据不会在应用程序更新之间自动保留(前提是您同时也 没有更改架构deleteRealmIfMigrationNeeded()
)。
如果更改数据库架构并设置了deleteRealmIfMigrationNeeded()
,则数据将被删除,以便自动迁移到新架构。
如果更改数据库架构但未设置deleteRealmIfMigrationNeeded()
,则必须提供RealmMigration,否则应用程序将崩溃并显示“需要迁移”异常。
例如,如果由于某种原因我将更改数据库的结构,是否可以只更改migrate()方法中的架构?
是。您可以与传递给的DynamicRealm进行交互,@Override public void migrate()
以指定迁移到新架构版本所需的更改。
您应该阅读Realm的迁移文档。
旁注:建设正如你在你的代码做RealmConfiguration应该不会做您每次请求一个实例时。相反,最好只在您的Application类中执行一次。另请参阅配置领域。
我应该在migration()方法内部做什么才能复制数据?
没什么,数据不会在应用程序更新之间自动保留(前提是您同时也 没有更改架构deleteRealmIfMigrationNeeded()
)。
如果更改数据库架构并设置了deleteRealmIfMigrationNeeded()
,则数据将被删除,以便自动迁移到新架构。
如果更改数据库架构但未设置deleteRealmIfMigrationNeeded()
,则必须提供RealmMigration,否则应用程序将崩溃并显示“需要迁移”异常。
例如,如果由于某种原因我将更改数据库的结构,是否可以只更改migrate()方法中的架构?
是。您可以与传递给的DynamicRealm进行交互,@Override public void migrate()
以指定迁移到新架构版本所需的更改。
您应该阅读Realm的迁移文档。
旁注:建设正如你在你的代码做RealmConfiguration应该不会做您每次请求一个实例时。相反,最好只在您的Application类中执行一次。另请参阅配置领域。