android - 使用Android中的Realm更新表中的多行

原文 标签 android database realm

我正在使用realm将我的值存储在本地数据库中。
我的要求是,我需要根据某些条件更改一个字段status=1
为了完成这项任务,我尝试了以下方法。而且效果很好。

   RealmResults<NotificationOrder> notificationOrders=realm
            .where(NotificationOrder.class)
            .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.property_id,ConstantMethod.getPreference(getActivity(),UserDefault.kPropertyId))
            .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.status,0)
            .findAll();

    for (NotificationOrder order:notificationOrders) {
        realm.beginTransaction();
        order.setStatus(1);
        realm.commitTransaction();
    }

现在,在我的本地数据库中可能有1000行这样的行,使用for循环更新单行似乎不是正确的方法。
所以我的问题是:是否有任何方法可以像MYSQL更新领域中的查询那样,通过单个语句更新status=0的所有行,而不是逐个更新单个行?
谢谢。

最佳答案

如果我知道正确的话,事务中的对象应该被管理,所以

realm.executeTransaction(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
       RealmResults<NotificationOrder> notificationOrders = realm
            .where(NotificationOrder.class)
            .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.property_id,ConstantMethod.getPreference(getActivity(),UserDefault.kPropertyId))
            .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.status,0)
            .findAll();
        for(NotificationOrder order : notificationOrders) {
            order.setStatus(1);
        }
    }
});

应该足够了。

相关文章:

database - 在数据库中建模从1到1..n的关系

java - Hibernate映射子类中的第二个@Embeddable字段

android - 领域的列表属性如何工作?

ios - 如何在领域中使用<或<=运算符搜索对象?

android - 确定Android上配对的蓝牙设备的制造商/型号

android - admob的填充率是否取决于第一个广告请求?

mysql - 在MySQL中按未知列类型排序

ios - 无法通过iOS中的可可豆安装Realm

android - 更改由于设备方向更改而在调整webView大小期间可见的应用程序背景色

android - 如何从资产文件夹中获取字体文件的路径,以及如何在Xamarin Android中使用该路径设置SKTypeface?