From cc4f1328ee0d93620d18ad2c9326a5360d5616c1 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 19 Mar 2013 11:28:25 +0100 Subject: [PATCH] Introduced public ArgumentPreparedStatementSetter and ArgumentTypePreparedStatementSetter classes Issue: SPR-10375 --- ...a => ArgumentPreparedStatementSetter.java} | 10 +++++----- ... ArgumentTypePreparedStatementSetter.java} | 19 +++++++++--------- .../jdbc/core/JdbcTemplate.java | 20 ++++++++++--------- 3 files changed, 25 insertions(+), 24 deletions(-) rename spring-jdbc/src/main/java/org/springframework/jdbc/core/{ArgPreparedStatementSetter.java => ArgumentPreparedStatementSetter.java} (85%) rename spring-jdbc/src/main/java/org/springframework/jdbc/core/{ArgTypePreparedStatementSetter.java => ArgumentTypePreparedStatementSetter.java} (83%) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgPreparedStatementSetter.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentPreparedStatementSetter.java similarity index 85% rename from spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgPreparedStatementSetter.java rename to spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentPreparedStatementSetter.java index 19b5ec0d49..24bc6870a7 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgPreparedStatementSetter.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentPreparedStatementSetter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,12 +20,12 @@ import java.sql.PreparedStatement; import java.sql.SQLException; /** - * Simple adapter for PreparedStatementSetter that applies - * a given array of arguments. + * Simple adapter for {@link PreparedStatementSetter} that applies a given array of arguments. * * @author Juergen Hoeller + * @since 3.2.3 */ -class ArgPreparedStatementSetter implements PreparedStatementSetter, ParameterDisposer { +public class ArgumentPreparedStatementSetter implements PreparedStatementSetter, ParameterDisposer { private final Object[] args; @@ -34,7 +34,7 @@ class ArgPreparedStatementSetter implements PreparedStatementSetter, ParameterDi * Create a new ArgPreparedStatementSetter for the given arguments. * @param args the arguments to set */ - public ArgPreparedStatementSetter(Object[] args) { + public ArgumentPreparedStatementSetter(Object[] args) { this.args = args; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgTypePreparedStatementSetter.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentTypePreparedStatementSetter.java similarity index 83% rename from spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgTypePreparedStatementSetter.java rename to spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentTypePreparedStatementSetter.java index 235ed6b0f5..ceb3d78542 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgTypePreparedStatementSetter.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/ArgumentTypePreparedStatementSetter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,17 +20,17 @@ import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; import java.util.Collection; -import java.util.Iterator; import org.springframework.dao.InvalidDataAccessApiUsageException; /** - * Simple adapter for PreparedStatementSetter that applies + * Simple adapter for {@link PreparedStatementSetter} that applies * given arrays of arguments and JDBC argument types. * * @author Juergen Hoeller + * @since 3.2.3 */ -class ArgTypePreparedStatementSetter implements PreparedStatementSetter, ParameterDisposer { +public class ArgumentTypePreparedStatementSetter implements PreparedStatementSetter, ParameterDisposer { private final Object[] args; @@ -42,7 +42,7 @@ class ArgTypePreparedStatementSetter implements PreparedStatementSetter, Paramet * @param args the arguments to set * @param argTypes the corresponding SQL types of the arguments */ - public ArgTypePreparedStatementSetter(Object[] args, int[] argTypes) { + public ArgumentTypePreparedStatementSetter(Object[] args, int[] argTypes) { if ((args != null && argTypes == null) || (args == null && argTypes != null) || (args != null && args.length != argTypes.length)) { throw new InvalidDataAccessApiUsageException("args and argTypes parameters must match"); @@ -59,12 +59,10 @@ class ArgTypePreparedStatementSetter implements PreparedStatementSetter, Paramet Object arg = this.args[i]; if (arg instanceof Collection && this.argTypes[i] != Types.ARRAY) { Collection entries = (Collection) arg; - for (Iterator it = entries.iterator(); it.hasNext();) { - Object entry = it.next(); + for (Object entry : entries) { if (entry instanceof Object[]) { - Object[] valueArray = ((Object[])entry); - for (int k = 0; k < valueArray.length; k++) { - Object argValue = valueArray[k]; + Object[] valueArray = ((Object[]) entry); + for (Object argValue : valueArray) { doSetValue(ps, parameterPosition, this.argTypes[i], argValue); parameterPosition++; } @@ -94,6 +92,7 @@ class ArgTypePreparedStatementSetter implements PreparedStatementSetter, Paramet */ protected void doSetValue(PreparedStatement ps, int parameterPosition, int argType, Object argValue) throws SQLException { + StatementCreatorUtils.setParameterValue(ps, parameterPosition, argType, argValue); } 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 910d206872..6edb4ca48c 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 @@ -1291,24 +1291,26 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } /** - * Create a new ArgPreparedStatementSetter using the args passed in. This method allows the - * creation to be overridden by sub-classes. + * Create a new arg-based PreparedStatementSetter using the args passed in. + *

By default, we'll create an {@link ArgumentPreparedStatementSetter}. + * This method allows for the creation to be overridden by subclasses. * @param args object array with arguments - * @return the new PreparedStatementSetter + * @return the new PreparedStatementSetter to use */ protected PreparedStatementSetter newArgPreparedStatementSetter(Object[] args) { - return new ArgPreparedStatementSetter(args); + return new ArgumentPreparedStatementSetter(args); } /** - * Create a new ArgTypePreparedStatementSetter using the args and argTypes passed in. - * This method allows the creation to be overridden by sub-classes. + * Create a new arg-type-based PreparedStatementSetter using the args and types passed in. + *

By default, we'll create an {@link ArgumentTypePreparedStatementSetter}. + * This method allows for the creation to be overridden by subclasses. * @param args object array with arguments - * @param argTypes int array of SQLTypes for arguments - * @return the new PreparedStatementSetter + * @param argTypes int array of SQLTypes for the associated arguments + * @return the new PreparedStatementSetter to use */ protected PreparedStatementSetter newArgTypePreparedStatementSetter(Object[] args, int[] argTypes) { - return new ArgTypePreparedStatementSetter(args, argTypes); + return new ArgumentTypePreparedStatementSetter(args, argTypes); } /**