更新 Realm 中的特定值

Update specific value in Realm

请问如何在不刷新所有内容的情况下更新 Realm 数据库中的特定值,我已经使用了 copyToRealmOrUpdate 和 insertOrUpdate,问题是,假设我有一个价值 [=25= 的领域数据库 class ]ID名称姓氏 如果我真的这样做了:

   final MyObject obj = new MyObject();
obj.setId(42);
obj.setName("Fish");
realm.executeTransaction(new Realm.Transaction()

{
    @Override
    public void execute (Realm realm){
    // This will create a new object in Realm or throw an exception if the
    // object already exists (same primary key)
    // realm.copyToRealm(obj);

    // This will update an existing object with the same primary key
    // or create a new object if an object with no primary key = 42
    realm.copyToRealmOrUpdate(obj);
}
});

它可能会将 ID 42 更新为 'name'="fish",但是如果我查询 surname 它不会 return 有效值,实际上我在项目中使用的真实代码是:

                final RealmDB_Class realmDB_class = new RealmDB_Class();
            realmDB_class.setPasswordForPrint("2");//no zero so that it can ask one more time
            realmDB_class.setId(1);
            realm.executeTransaction(new Realm.Transaction() {
                                         @Override
                                         public void execute(Realm realm) {
                                             realm.insertOrUpdate(realmDB_class);
                                         }
                                     }


            );

我只想将 setpasswordForPrint 更新为“2”,同时保留我之前保存在领域数据库中的其他值,例如名为 'name' 的变量。 问题是,当我查询名称时,它指向 null,可能是因为我没有在此处重新插入它。我不想插入它。

我试过使用 copyToRealmOrUpdate 但它也没有用。我是要再次插入所有值还是没有办法只更新一个值,例如 SQL UPDATE 'A' SET ...WHERE ... 而不插入新值。如果 'row' 有名字和姓氏,我不能只使用 ID 更新名字而不用再次输入姓氏吗?

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute (Realm realm) {
         MyObject obj = realm.where(MyObject.class).equalTo("id", 42).findFirst();
         if(obj == null) {
             obj = realm.createObject(MyObject.class, 42);
         }
         obj.setName("Fish");
    }
});

或者

realm.executeTransaction(new Realm.Transaction() {
     @Override
     public void execute(Realm realm) {
          final RealmDB_Class realmDB_class = realm.where(RealmDB_Class.class).equalTo("id", 1).findFirst();
          realmDB_class.setPasswordForPrint("2");
     }
});

insertOrUpdate() 无法区分您正在保存的值是明确设置为 null 还是您从未初始化过它,因此要更新特定字段,您需要使用访问器事务内的托管对象。