From da89308c58ef5989385378b85e61fa9dcd2e2786 Mon Sep 17 00:00:00 2001 From: jher235 Date: Tue, 16 Dec 2025 23:49:00 +0900 Subject: [PATCH] Replace String concatenation with StringBuilder in BatchUpdateException 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 da05923cae2e..b6ff1892f055 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 int[] doInStatement(Statement stmt) throws SQLException, DataAccessExcept 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; }