如何快速更改 ORM 数据库中的多条记录?

How change many records in an ORM database quickly?

情况: 我需要使用 ORMLite DAO 更改数据库中的许多记录(例如 10 000 条记录)。所有记录仅在一个table,在一列和更改记录中更改,其中指定了id。

问题:如何使用ORMLite DAO一次更新数据库中的多条记录?


现在我更新记录,使用这个代码:

imagesDao.update(imageOrmRecord);

但是更新记录的周期很慢(100records\sec)。

我认为真正的更新记录,使用SQL-代码,但这是不可取的...

SQL 是一种面向集合的语言。 ORM 的全部意义在于将其抽象为对象。 所以当你想更新一堆对象时,你必须要遍历这些对象。 (您已 运行 进入 object-relational impedance mismatch; also read The Vietnam of Computer Science。)

ORMLite 给你一个后门 to execute raw SQL:

someDao.executeRaw("UPDATE ...");

但如果您的唯一问题是性能,这很可能是由自动提交模式引起的,它会增加每条语句的事务开销。使用 callBatchTasks() 可以解决这个问题。

Question: how update many records in database at once, using ORMLite DAO?

这在一定程度上取决于您进行的更新。您当然可以使用 UpdateBuilder 对对象进行批量更新。

UpdateBuilder<Account, String> updateBuilder = accountDao.updateBuilder();
// update the password to be "none"
updateBuilder.updateColumnValue("password", "none");
// only update the rows where password is null
updateBuilder.where().isNull(Account.PASSWORD_FIELD_NAME);
updateBuilder.update();

或类似的东西:

// update hasDog boolean to true if dogC > 0
updateBuilder.updateColumnExpression("hasDog", "dogC > 0");

您应该能够通过这种方式完成使用原始 SQL 进行的大部分更新。

但是如果您需要对每个实体进行更新,那么您需要对每个实体进行 dao.update(...)。然后我要做的是在事务中执行此操作以使更新速度更快。参见 this answer