首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列表小于getBatchSize()的jdbcTemplate.batchUpdate()会引发IndexOutOfBoundsException错误

列表小于getBatchSize()的jdbcTemplate.batchUpdate()会引发IndexOutOfBoundsException错误
EN

Stack Overflow用户
提问于 2020-02-27 22:28:02
回答 1查看 575关注 0票数 1

我要用1000块数据调用jdbcTemplate.batchUpdate()。列表可以是任意大的--有时可以小于1000,在这种情况下,只有一个小批量。我的假设是jdbcTemplate.batchUpdate足够聪明,能够计算出要执行多少批处理。

但我看到了以下内容:假设我的列表有3个项目:

代码语言:javascript
复制
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.
    }

}

错误:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

发布于 2020-02-27 22:36:54

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

使用此实现:

代码语言:javascript
复制
@Override
public int getBatchSize() {
    return batchInsertUsers.size(); // Return the size of the batch.
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60435443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档