簡體   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