gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:27:17 42 4
gpt4 key购买 nike

更新 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)快得多。

最佳答案

您的方向是正确的,但是查询不必在事务中,并且当您在事务中时,您不必再次插入更新的对象。事务中的写入会在 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());
}
});
}

What do you think about performance of an UPDATE operation compared to SQLite? In my opinion SQLite should be always much faster than Realm (uses POJO) in terms of updating data.

这不是一个主观问题。一种较快,一种较慢。您可以在 news post 中查看 Realm 与 sqlite 的比较基准。

关于java - 在 Android 上更新 Realm.io 数据库表中所有行的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328900/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com