繁体   English   中英

列表小于 getBatchSize() 的 jdbcTemplate.batchUpdate() 抛出 IndexOutOfBoundsException 错误

[英]jdbcTemplate.batchUpdate() with smaller list than getBatchSize() throws IndexOutOfBoundsException error

我正在使用 1000 个块调用jdbcTemplate.batchUpdate() 。该列表可以是任意大的——有时它可能小于 1000,在这种情况下只有一小批。 我的假设是jdbcTemplate.batchUpdate足够聪明, 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)

int getBatchSize()返回批次的大小。

使用这个实现:

@Override
public int getBatchSize() {
    return batchInsertUsers.size(); // Return the size of the batch.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM