簡體   English   中英

在Android上更新Realm.io數據庫表中所有行的最佳方法是什么?

[英]What is the best way to update all rows in Realm.io database table on Android?

更新Realm數據庫表中所有記錄的最佳方法是什么?
這是我目前的操作:

  1. 我正在將所有行選擇到RealmResults列表中
  2. 循環一一更新
  3. 再次將更新RealmResults保存到Realm數據庫。

我的代碼:

@Override
public void updateAll(final Fragment fragment) {
    final long startTime = System.nanoTime();
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            final RealmResults<Stock> realmResults = realm.where(Stock.class).findAll();
            Log.d(Constants.LOG_TAG, "All rows [" + realmResults.size() + "] selected and fetched into RealmResults. Called 'execute' callback.");
            for (Stock stock : realmResults) {
                stock.setDate("1");
                stock.setAdjClose(2);
                stock.setVolume(3);
                stock.setHigh(4);
                stock.setLow(5);
                stock.setOpen(6);
                stock.setClose(7);
            }
            realm.insertOrUpdate(realmResults);
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            Log.d(Constants.LOG_TAG, "All rows updated. Called 'onSuccess' callback.");
            ((RealmFragment) fragment).stopBenchmark(startTime, System.nanoTime());
        }
    });
}

我還有另一個問題:

與SQLite相比,您如何看待UPDATE操作的性能? 我認為SQLite在更新數據方面應該總是比Realm(使用POJO)快得多。

您處在正確的軌道上,但查詢不必在事務中,並且在事務中時,不必再次插入更新的對象。 事務中的寫入會自動進行領域更新。 這就是重點。

@Override
public void updateAll(final Fragment fragment) {
    final long startTime = System.nanoTime();
    final RealmResults<Stock> realmResults = realm.where(Stock.class).findAll();
    Log.d(Constants.LOG_TAG, "All rows [" + realmResults.size() + "] selected and fetched into RealmResults. Called 'execute' callback.");

    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm realm) {
            for (Stock stock : realmResults) {
                stock.setDate("1");
                stock.setAdjClose(2);
                stock.setVolume(3);
                stock.setHigh(4);
                stock.setLow(5);
                stock.setOpen(6);
                stock.setClose(7);
            }
        }
    }, new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            Log.d(Constants.LOG_TAG, "All rows updated. Called 'onSuccess' callback.");
            ((RealmFragment) fragment).stopBenchmark(startTime, System.nanoTime());
        }
    });
}

與SQLite相比,您如何看待UPDATE操作的性能? 我認為SQLite在更新數據方面應該總是比Realm(使用POJO)快得多。

這不是主觀問題。 一種更快,另一種更慢。 您可以在此新聞中看到將領域與sqlite進行比較的基准

暫無
暫無

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

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