Skip to content

Commit 98a49b4

Browse files
committed
NamedParameterJdbcTemplate only treats Iterables like Collections
Closes gh-22981
1 parent bee4fb0 commit 98a49b4

File tree

3 files changed

+7
-19
lines changed

3 files changed

+7
-19
lines changed

spring-jdbc/src/main/java/org/springframework/jdbc/core/PreparedStatementCreatorFactory.java

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.dao.InvalidDataAccessApiUsageException;
3232
import org.springframework.lang.Nullable;
3333
import org.springframework.util.Assert;
34-
import org.springframework.util.ObjectUtils;
3534

3635
/**
3736
* Helper class that efficiently creates multiple {@link PreparedStatementCreator}
@@ -268,19 +267,13 @@ public void setValues(PreparedStatement ps) throws SQLException {
268267
}
269268
declaredParameter = declaredParameters.get(i);
270269
}
271-
if (in != null && in.getClass().isArray()) {
272-
in = Arrays.asList(ObjectUtils.toObjectArray(in));
273-
}
274270
if (in instanceof Iterable && declaredParameter.getSqlType() != Types.ARRAY) {
275271
Iterable<?> entries = (Iterable<?>) in;
276272
for (Object entry : entries) {
277-
if (entry != null && entry.getClass().isArray()) {
278-
entry = Arrays.asList(ObjectUtils.toObjectArray(entry));
279-
}
280-
if (entry instanceof Iterable) {
281-
Iterable<?> values = (Iterable<?>) entry;
282-
for (Object value : values) {
283-
StatementCreatorUtils.setParameterValue(ps, sqlColIndx++, declaredParameter, value);
273+
if (entry instanceof Object[]) {
274+
Object[] valueArray = (Object[]) entry;
275+
for (Object argValue : valueArray) {
276+
StatementCreatorUtils.setParameterValue(ps, sqlColIndx++, declaredParameter, argValue);
284277
}
285278
}
286279
else {

spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.springframework.jdbc.core.namedparam;
1818

1919
import java.util.ArrayList;
20-
import java.util.Arrays;
2120
import java.util.HashSet;
2221
import java.util.Iterator;
2322
import java.util.List;
@@ -29,7 +28,6 @@
2928
import org.springframework.jdbc.core.SqlParameterValue;
3029
import org.springframework.lang.Nullable;
3130
import org.springframework.util.Assert;
32-
import org.springframework.util.ObjectUtils;
3331

3432
/**
3533
* Helper methods for named parameter parsing.
@@ -285,9 +283,6 @@ public static String substituteNamedParameters(ParsedSql parsedSql, @Nullable Sq
285283
if (value instanceof SqlParameterValue) {
286284
value = ((SqlParameterValue) value).getValue();
287285
}
288-
if (value != null && value.getClass().isArray()) {
289-
value = Arrays.asList(ObjectUtils.toObjectArray(value));
290-
}
291286
if (value instanceof Iterable) {
292287
Iterator<?> entryIter = ((Iterable<?>) value).iterator();
293288
int k = 0;

spring-jdbc/src/test/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplateTests.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -477,7 +477,7 @@ public void testBatchUpdateWithInClause() throws Exception {
477477
@SuppressWarnings("unchecked")
478478
Map<String, Object>[] parameters = new Map[3];
479479
parameters[0] = Collections.singletonMap("ids", Arrays.asList(1, 2));
480-
parameters[1] = Collections.singletonMap("ids", new Integer[] {3, 4});
480+
parameters[1] = Collections.singletonMap("ids", Arrays.asList("3", "4"));
481481
parameters[2] = Collections.singletonMap("ids", (Iterable<Integer>) () -> Arrays.asList(5, 6).iterator());
482482

483483
final int[] rowsAffected = new int[] {1, 2, 3};
@@ -500,8 +500,8 @@ public void testBatchUpdateWithInClause() throws Exception {
500500
inOrder.verify(preparedStatement).setObject(2, 2);
501501
inOrder.verify(preparedStatement).addBatch();
502502

503-
inOrder.verify(preparedStatement).setObject(1, 3);
504-
inOrder.verify(preparedStatement).setObject(2, 4);
503+
inOrder.verify(preparedStatement).setString(1, "3");
504+
inOrder.verify(preparedStatement).setString(2, "4");
505505
inOrder.verify(preparedStatement).addBatch();
506506

507507
inOrder.verify(preparedStatement).setObject(1, 5);

0 commit comments

Comments
 (0)