我要用1000块数据调用jdbcTemplate.batchUpdate()。列表可以是任意大的--有时可以小于1000,在这种情况下,只有一个小批量。我的假设是jdbcTemplate.batchUpdate足够聪明,能够计算出要执行多少批处理。
但我看到了以下内容:假设我的列表有3个项目:
final List<UsersT> batchInsertUsers = ...; // 3 items in List
String sqlInsert = "INSERT INTO USERS_T ...";
jdbcTemplate.batchUpdate(sqlInsert, new BatchPreparedStatementSetter() {
@Override
public int getBatchSize() {
return 1000; // Max Batch size greater than current list. 1 batch expected
}
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, batchInsertUsers.get(i).getId());
ps.setString(2, batchInsertUsers.get(i).getPassword());
// etc.
}}
错误:
java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at app.ResearcherServiceImpl$1.setValues(ResearcherServiceImpl.java:535)发布于 2020-02-27 22:36:54
int getBatchSize()返回批次的大小。
使用此实现:
@Override
public int getBatchSize() {
return batchInsertUsers.size(); // Return the size of the batch.
}https://stackoverflow.com/questions/60435443
复制相似问题