首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Realm添加两个表而不丢失任何数据

Realm添加两个表而不丢失任何数据
EN

Stack Overflow用户
提问于 2020-04-09 16:00:46
回答 1查看 71关注 0票数 1

我想添加两个表,而不会丢失旧表中的任何数据。所以我创建了“情感”表

代码语言:javascript
运行
复制
public class Emotion extends RealmObject {
    private String uuid;
    private String name;

和EmotionValue

代码语言:javascript
运行
复制
public class EmotionValue extends RealmObject {

    private String uuid;
    private String emotionId;
    private String name;

我的RealmMigrations有这个代码

代码语言:javascript
运行
复制
public class RealmMigrations implements RealmMigration {

    @Override
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
        final RealmSchema schema = realm.getSchema();

...

    if(oldVersion == 5) {
                schema.create("Emotion")
                        .addField("uuid", String.class)
                        .addField("name", String.class);

                schema.create("EmotionValue")
                        .addField("uuid", String.class)
                        .addField("emotionId", String.class)
                        .addField("name", String.class);

                oldVersion++;
            }

我的App

代码语言:javascript
运行
复制
public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(getApplicationContext());
        RealmConfiguration config = getRealmConfig("superdatabase");
        Realm.setDefaultConfiguration(config);

        Stetho.initialize(
                Stetho.newInitializerBuilder(this)
                        .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
                        .enableWebKitInspector(RealmInspectorModulesProvider.builder(this).build())
                        .build());
    }

    public static RealmConfiguration getRealmConfig(String name) {
        return new RealmConfiguration.Builder()
                .name(name)
                .schemaVersion(5)
                .migration(new RealmMigrations())
                .build();
    }
}

当我运行一个应用程序时,我有一个错误:

代码语言:javascript
运行
复制
  Caused by: io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
    - Class 'Emotion' has been added.
    - Class 'EmotionValue' has been added.
        at io.realm.internal.OsSharedRealm.nativeGetSharedRealm(Native Method)
        at io.realm.internal.OsSharedRealm.<init>(OsSharedRealm.java:171)
        at io.realm.internal.OsSharedRealm.getInstance(OsSharedRealm.java:241)
        at io.realm.BaseRealm.<init>(BaseRealm.java:135)
        at io.realm.BaseRealm.<init>(BaseRealm.java:103)
        at io.realm.Realm.<init>(Realm.java:163)
        at io.realm.Realm.createInstance(Realm.java:499)
        at io.realm.RealmCache.doCreateRealmOrGetFromCache(RealmCache.java:341)
        at io.realm.RealmCache.createRealmOrGetFromCache(RealmCache.java:284)
        at io.realm.Realm.getInstance(Realm.java:428)
        at com.timecontrolapp.models.App.onCreate(App.java:17)
        at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1012)
        at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4553)

at com.timecontrolapp.models.App.onCreate(App.java:17)有这行Realm.setDefaultConfiguration(config);。我的问题是,如何向现有数据库添加一些表,而不会丢失旧数据库中的任何数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 16:17:41

所以你只需要升级schemaVersion(),在你的例子中是6而不是5。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61116494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档