Realm android中的更新语句

Posted

技术标签:

【中文标题】Realm android中的更新语句【英文标题】:Update statement in Realm android 【发布时间】:2015-01-29 04:18:40 【问题描述】:

我应该如何使用 android 中的领域数据库更新已经存在的值?

我一直在尝试更新它,但它只是作为新值添加而不是覆盖它

【问题讨论】:

请向我们展示您的努力(代码的相关部分,您尝试更新的地方)。只有这样我们才能告诉您问题出在哪里。 通过示例查看完整答案***.com/questions/30933229/… 【参考方案1】:

在 Realm DB 中更新现有对象及其所有字段的另一种方法是使用方法realm.copyToRealmOrUpdate()

Object obj = new Object();
obj.setField1(field1);
obj.setField2(field2);
realm.beginTransaction();
realm.copyToRealmOrUpdate(obj);
realm.commitTransaction();

如果你的对象有一个主键,这个方法会自动更新对象,没有重复的对象:)

更多信息:copyToRealmOrUpdate()

【讨论】:

在创建对象之前开始事务实际上并没有任何好处。所以我建议在 copyToRealmOrUpdate() 之前将第一行向下移动以使其清楚。 这个答案已经过时了?如果您使用领域,则不需要realm.copyToRealmOrUpdate(obj);。仅当您使用 Retrofit 时才需要它,例如:realm.io/docs/java/latest/#retrofit @MicroR 那么,有什么替代方案呢?如何更新 Realm 中的现有值? (如果我使用createObject(),我会得到Realm Database Error: Value already exists:)。 如果我没有主键但我还想更新怎么办? 来自文档:“使用主键可以使用 copyToRealmOrUpdate() 方法,该方法将使用此主键查找现有对象,并在找到时更新它”【参考方案2】:

您可以使用 insertOrUpdate 方法来执行此操作。希望这会有所帮助

  Realm.getDefaultInstance().executeTransaction(new Realm.Transaction() 
                @Override
                public void execute(Realm realm) 

                    objectToEdit.setNewValue("string");
                    realm.insertOrUpdate();
                
            );

【讨论】:

【参考方案3】:
Realm realm = Realm.getDefaultInstance();
    OrderedRealmCollection<Practice> orderedRealmCollection = 
             realm.where(Practice.class)
            .contains("key", "matchig value")
            .findAll();

    if(orderedRealmCollection.size()!=0)
        Practice practice = orderedRealmCollection.first();
        Realm.getDefaultInstance().executeTransaction(new Realm.Transaction() 
            @Override
            public void execute(Realm realm) 
                practice.setUpdate_practice_steps(""+steps);
                realm.insertOrUpdate(practice);
            
        );
    

【讨论】:

以上是关于Realm android中的更新语句的主要内容,如果未能解决你的问题,请参考以下文章

在android中删除Realm中的单个对象数据/行

Realm android中的逻辑AND操作

Android中的Realm VS Room [关闭]

如何在 Android 中清除 Realm 中的数据库

Android 和 iOS 中的证书固定

防止 Realm 在更新对象时覆盖属性