在Android上更新数据库表 Realm.io 所有行的最佳方法是什么?



更新 Realm 数据库表中的所有记录的最佳方法是什么?
这是我此刻所做的:

  1. 我正在将所有行都选入 RealmResults 列表
  2. 循环中逐个更新它们
  3. 再次将更新的领域结果保存到领域数据库。

我的代码:

@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(快得多。

您走在正确的轨道上,但查询不必在事务中,并且在事务中时,您不必再次插入更新的对象。事务中的写入会在 Realm 中自动更新。这就是它的重点。

@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(快得多。

这不是一个主观问题。一个更快,一个更慢。您可以在这篇新闻文章中看到 realm 与 sqlite 进行比较的基准测试

相关内容

最新更新