diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java
index 89092f58ea..4838235184 100644
--- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java
+++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java
@@ -34,6 +34,7 @@ import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+
import javax.sql.DataSource;
import org.springframework.dao.DataAccessException;
@@ -49,6 +50,7 @@ import org.springframework.jdbc.support.nativejdbc.NativeJdbcExtractor;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.util.Assert;
import org.springframework.util.LinkedCaseInsensitiveMap;
+import org.springframework.util.StringUtils;
/**
* This is the central class in the JDBC core package.
@@ -544,18 +546,26 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
@Override
public int[] batchUpdate(final String[] sql) throws DataAccessException {
+
Assert.notEmpty(sql, "SQL array must not be empty");
+
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL batch update of " + sql.length + " statements");
}
+
class BatchUpdateStatementCallback implements StatementCallback, SqlProvider {
+
private String currSql;
+
@Override
public int[] doInStatement(Statement stmt) throws SQLException, DataAccessException {
+
int[] rowsAffected = new int[sql.length];
+
if (JdbcUtils.supportsBatchUpdates(stmt.getConnection())) {
for (String sqlStmt : sql) {
- this.currSql = sqlStmt;
+ this.currSql = (StringUtils.isEmpty(this.currSql) ? sqlStmt
+ : this.currSql + "; " + sqlStmt);
stmt.addBatch(sqlStmt);
}
rowsAffected = stmt.executeBatch();