You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2014/08/04 09:26:40 UTC

[3/3] git commit: CAMEL-7653: camel-sql, set prepared statement arguments using a setter that deals with various JDBC driver differences with setObject vs setInteger/setString etc. Thanks to Jo Geraerts for the patch.

CAMEL-7653: camel-sql, set prepared statement arguments using a setter that deals with various JDBC driver differences with setObject vs setInteger/setString etc. Thanks to Jo Geraerts for the patch.

Conflicts:
	components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/4c62b2e4
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/4c62b2e4
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/4c62b2e4

Branch: refs/heads/camel-2.12.x
Commit: 4c62b2e4a1ee7b740be0e0e67e4340dccea3c1d7
Parents: 563d143
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Aug 4 09:24:09 2014 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Aug 4 09:26:25 2014 +0200

----------------------------------------------------------------------
 .../sql/DefaultSqlPrepareStatementStrategy.java | 28 ++++++++++++++------
 1 file changed, 20 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/4c62b2e4/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
----------------------------------------------------------------------
diff --git a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
index 0ffac39..87221c5 100644
--- a/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
+++ b/components/camel-sql/src/main/java/org/apache/camel/component/sql/DefaultSqlPrepareStatementStrategy.java
@@ -32,6 +32,7 @@ import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.util.StringQuoteHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.ArgumentPreparedStatementSetter;
 
 /**
  * Default {@link SqlPrepareStatementStrategy} that supports named query parameters as well index based.
@@ -146,19 +147,30 @@ public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt
 
     @Override
     public void populateStatement(PreparedStatement ps, Iterator<?> iterator, int expectedParams) throws SQLException {
+        if (expectedParams <= 0) {
+            return;
+        }
+
+        final Object[] args = new Object[expectedParams];
+        int i = 0;
         int argNumber = 1;
-        if (expectedParams > 0) {
-            while (iterator != null && iterator.hasNext()) {
-                Object value = iterator.next();
-                LOG.trace("Setting parameter #{} with value: {}", argNumber, value);
-                ps.setObject(argNumber, value);
-                argNumber++;
+
+        while (iterator != null && iterator.hasNext()) {
+            Object value = iterator.next();
+            LOG.trace("Setting parameter #{} with value: {}", argNumber, value);
+            if (argNumber <= expectedParams) {
+                args[i] = value;
             }
+            argNumber++;
+            i++;
         }
-
         if (argNumber - 1 != expectedParams) {
-            throw new SQLException("Number of parameters mismatch. Expected: " + expectedParams + ", was:" + (argNumber - 1));
+            throw new SQLException("Number of parameters mismatch. Expected: " + expectedParams + ", was: " + (argNumber - 1));
         }
+
+        // use argument setter as it deals with various JDBC drivers setObject vs setLong/setInteger/setString etc.
+        ArgumentPreparedStatementSetter setter = new ArgumentPreparedStatementSetter(args);
+        setter.setValues(ps);
     }
 
     protected boolean hasNamedParameters(String query) {