更新 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
还是您从未初始化过它,因此要更新特定字段,您需要使用访问器事务内的托管对象。
请问如何在不刷新所有内容的情况下更新 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
还是您从未初始化过它,因此要更新特定字段,您需要使用访问器事务内的托管对象。