From ec6b7730a2e14661c338c9d8358c351ca16a45dc Mon Sep 17 00:00:00 2001 From: Brian Clozel Date: Wed, 17 Dec 2025 12:32:50 +0100 Subject: [PATCH] Polishing contribution Closes gh-36032 --- .../jdbc/core/JdbcTemplate.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) 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 b6ff1892f05..17791311685 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 @@ -58,7 +58,6 @@ import org.springframework.jdbc.support.rowset.SqlRowSet; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedCaseInsensitiveMap; -import org.springframework.util.StringUtils; /** * This is the central delegate in the JDBC core package. @@ -591,41 +590,34 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { // Callback to execute the batch update. class BatchUpdateStatementCallback implements StatementCallback, SqlProvider { - private @Nullable String currSql; + private final StringBuilder currSql = new StringBuilder(); @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 = appendSql(this.currSql, sqlStmt); + appendSql(sqlStmt); stmt.addBatch(sqlStmt); } try { rowsAffected = stmt.executeBatch(); } catch (BatchUpdateException ex) { + this.currSql.setLength(0); int[] updateCounts = ex.getUpdateCounts(); - StringBuilder batchExceptionSql = new StringBuilder(); - - for (int i = 0; i < Math.min(updateCounts.length, sql.length); i++) { + for (int i = 0; i < ex.getUpdateCounts().length; i++) { if (updateCounts[i] == Statement.EXECUTE_FAILED) { - if (batchExceptionSql.length() > 0) { - batchExceptionSql.append("; "); - } - batchExceptionSql.append(sql[i]); + appendSql(sql[i]); } } - - if (batchExceptionSql.length() > 0) { - this.currSql = batchExceptionSql.toString(); - } throw ex; } } else { for (int i = 0; i < sql.length; i++) { - this.currSql = sql[i]; + this.currSql.setLength(0); + this.currSql.append(sql[i]); if (!stmt.execute(sql[i])) { rowsAffected[i] = stmt.getUpdateCount(); } @@ -637,13 +629,16 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { return rowsAffected; } - private String appendSql(@Nullable String sql, String statement) { - return (StringUtils.hasLength(sql) ? sql + "; " + statement : statement); + private void appendSql(String statement) { + if (!this.currSql.isEmpty()) { + this.currSql.append("; "); + } + this.currSql.append(statement); } @Override public @Nullable String getSql() { - return this.currSql; + return this.currSql.toString(); } }