From fc29d88778534f5db98e81f7ff8a6edfff83bf62 Mon Sep 17 00:00:00 2001 From: jher235 Date: Tue, 16 Dec 2025 23:49:00 +0900 Subject: [PATCH] Use StringBuilder in JdbcTemplate for batch updates See gh-36032 Signed-off-by: jher235 --- .../jdbc/core/JdbcTemplate.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 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 da05923cae2..b6ff1892f05 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 @@ -605,14 +605,20 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { rowsAffected = stmt.executeBatch(); } catch (BatchUpdateException ex) { - String batchExceptionSql = null; - for (int i = 0; i < ex.getUpdateCounts().length; i++) { - if (ex.getUpdateCounts()[i] == Statement.EXECUTE_FAILED) { - batchExceptionSql = appendSql(batchExceptionSql, sql[i]); + int[] updateCounts = ex.getUpdateCounts(); + StringBuilder batchExceptionSql = new StringBuilder(); + + for (int i = 0; i < Math.min(updateCounts.length, sql.length); i++) { + if (updateCounts[i] == Statement.EXECUTE_FAILED) { + if (batchExceptionSql.length() > 0) { + batchExceptionSql.append("; "); + } + batchExceptionSql.append(sql[i]); } } - if (StringUtils.hasLength(batchExceptionSql)) { - this.currSql = batchExceptionSql; + + if (batchExceptionSql.length() > 0) { + this.currSql = batchExceptionSql.toString(); } throw ex; }