2016-12-18 73 views
1

情況:我需要更改數據庫中的許多記錄(例如10 000條記錄),使用ORMLite DAO。所有記錄僅在一個表中,在一列中更改,並且更改具有指定id的記錄。如何在ORM數據庫更改多條記錄快?

問題:如何一次更新數據庫中的很多記錄,使用ORMLite DAO


現在我更新記錄,使用此代碼:循環非常慢

imagesDao.update(imageOrmRecord);

但更新記錄(100條記錄\秒)。

我認爲,真正的更新記錄,使用SQL代碼,但是這是不可取的......

+0

什麼是你的問題? – GhostCat

回答

1

SQL是一種面向集合的語言。 ORM的要點是將其抽象爲對象。 所以,當你想更新了一堆的對象,你必須去通過這些對象。 (您已運行到object-relational impedance mismatch;也讀The Vietnam of Computer Science

ORMLite爲您提供了一個後門to execute raw SQL

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

但是,如果你唯一的問題是性能,這很可能是由自動所致提交模式,它將事務開銷添加到每個單獨的語句。使用callBatchTasks()可以解決這個問題。

0

問題:在數據庫中更新如何對多條記錄一次,使用DAO ORMLite?

這取決於什麼更新你是一個位。你當然可以使用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

相關問題