gpt4 book ai didi

spring-jdbc - 如何使用Spring JDBC模板批处理在数据库中进行多次插入?

转载 作者:行者123 更新时间:2023-12-03 13:16:43 26 4
gpt4 key购买 nike

我需要一次将数千条记录插入数据库中。我在我的应用程序中使用spring JDBC模板。

下面是我到目前为止编写的代码,可以一次性执行所有插入操作。因此,如果我拥有10,000个用户,则将它们一次插入。但是我想要的是分批执行它们,例如一批执行500条记录,依此类推。

@Override
public void saveBatch(final List<Employee> employeeList) {
final int batchSize = 500;

getJdbcTemplate().batchUpdate(QUERY_SAVE,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
Employee employee = employeeList.get(i);
ps.setString(1, employee.getFirstname());
ps.setString(2, employee.getLastname());
ps.setString(3, employee.getEmployeeIdOnSourceSystem());
}

@Override
public int getBatchSize() {
return employeeList.size();
}
});

}

我如何更改上面的代码,以使我们可以将批量大小设为500,而不是employeeList.size()批量大小,然后执行它们,然后再执行下一个500,依此类推?

请帮忙。

最佳答案

我不确定是否可以单独使用JDBC模板来做到这一点。也许您可以通过将大列表切成批处理大小的块来逐步调用batchUpdate方法。

在这里看看:

@Override
public void saveBatch(final List<Employee> employeeList) {
final int batchSize = 500;

for (int j = 0; j < employeeList.size(); j += batchSize) {

final List<Employee> batchList = employeeList.subList(j, j + batchSize > employeeList.size() ? employeeList.size() : j + batchSize);

getJdbcTemplate().batchUpdate(QUERY_SAVE,
new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i)
throws SQLException {
Employee employee = batchList.get(i);
ps.setString(1, employee.getFirstname());
ps.setString(2, employee.getLastname());
ps.setString(3, employee.getEmployeeIdOnSourceSystem());
}

@Override
public int getBatchSize() {
return batchList.size();
}
});

}
}

关于spring-jdbc - 如何使用Spring JDBC模板批处理在数据库中进行多次插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9565481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com