Batches
Hint
This article is generated by AI translation.
JdbcTemplate.executeBatch sends a batch of commands to the database. If every command succeeds, the method returns an array of update counts ordered the same as the statements/argument sets.
Usage
Batch execution with no arguments runs via Statement. Example bulk INSERT:
No arguments
int[] result = jdbc.executeBatch(new String[] {
"insert into users values (1, 'David')",
"insert into users values (2, 'Kevin')"
});
Positional arguments
String sql = "insert into users values (?,?)";
Object[][] arg = new Object[][] {
new Object[] { 1, "David"},
new Object[] { 2, "Kevin"}
};
int[] result = jdbc.executeBatch(sql, arg);
Named arguments
String sql = "insert into users (id, name) values(:id, :name)";
Map<String, Object> args1 = CollectionUtils.asMap(
"id", 1,
"name", "David"
);
Map<String, Object> args2 = CollectionUtils.asMap(
"id", 2,
"name", "Kevin"
);
int[] result = jdbc.executeBatch(sql, new Map[] { args1, args2 });
PreparedStatement setter
String sql = "insert into users values (?,?)";
Object[][] arg = new Object[][] {
new Object[] { 1, "David"},
new Object[] { 2, "Kevin"}
};
BatchPreparedStatementSetter setter = new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setInt(1, (int)arg[i][0]);
ps.setString(2, (String)arg[i][1]);
}
public int getBatchSize() {
return arg.length;
}
};
int[] result = jdbc.executeBatch(sql, setter);
info
- dbVisitor supports many argument styles; these examples stick to none, positional, and named arguments.
- See Arguments for more options.
Return Values
Possible outcomes:
- >= 0: command succeeded and the number indicates affected rows.
- SUCCESS_NO_INFO: command succeeded but the driver cannot determine the row count (
java.sql.Statement.SUCCESS_NO_INFO). - EXECUTE_FAILED: command failed yet the driver continued with the rest.
If any command fails or tries to return a result set, JDBC throws BatchUpdateException.
info
Drivers may implement batch semantics differently despite the JDBC specification. Consult your JDBC driver documentation for exact behavior.