Я звоню jdbcTemplate.batchUpdate()
с кусками 1000. Список может быть сколь угодно большим - и иногда он может быть меньше 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)