簡體   English   中英

在 Android 中使用 Realm 更新表中的多行

[英]Update mutiple rows in table using Realm in Android

我正在使用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 循環更新單行似乎不是正確的方法。

所以我的問題有沒有像 Realm 中的MYSQL更新查詢那樣的方法,我們可以通過單個語句更新狀態 = 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);
        }
    }
});

應該夠了。

您可以通過setValue方法進行批量更新,如下所示:

realm.where(NotificationOrder.class)
.equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.property_id,ConstantMethod.getPreference(getActivity(),UserDefault.kPropertyId))
            .equalTo(RealmConstants.TBL_NOTIFICATION_ORDER.status,0)
            .findAll()
            .setValue(RealmConstants.REALM_FIELD_NAME,value); // 1st parameter is field name, 2nd is value

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM