From 6b4c29cd24dac07722df6f2a4e417775f87d5141 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 19 Mar 2013 11:14:33 +0100 Subject: [PATCH] Defensively uses JDBC 3.0 getParameterType call for Oracle driver compatibility Issue: SPR-10385 --- .../jdbc/core/StatementCreatorUtils.java | 24 +++++++------------ 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java index ea8e74501e9..a1fbc4d5207 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java @@ -22,7 +22,6 @@ import java.math.BigInteger; import java.sql.Blob; import java.sql.Clob; import java.sql.DatabaseMetaData; -import java.sql.ParameterMetaData; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Types; @@ -229,18 +228,13 @@ public abstract class StatementCreatorUtils { boolean useSetObject = false; sqlType = Types.NULL; try { - ParameterMetaData pmd = null; + sqlType = ps.getParameterMetaData().getParameterType(paramIndex); + } + catch (Throwable ex) { + logger.debug("JDBC 3.0 getParameterType call not supported", ex); + // JDBC driver not compliant with JDBC 3.0 + // -> proceed with database-specific checks try { - pmd = ps.getParameterMetaData(); - } - catch (Throwable ex) { - // JDBC driver not compliant with JDBC 3.0 - // -> proceed with database-specific checks - } - if (pmd != null) { - sqlType = pmd.getParameterType(paramIndex); - } - else { DatabaseMetaData dbmd = ps.getConnection().getMetaData(); String databaseProductName = dbmd.getDatabaseProductName(); String jdbcDriverName = dbmd.getDriverName(); @@ -255,9 +249,9 @@ public abstract class StatementCreatorUtils { sqlType = Types.VARCHAR; } } - } - catch (Throwable ex) { - logger.debug("Could not check database or driver name", ex); + catch (Throwable ex2) { + logger.debug("Could not check database or driver name", ex2); + } } if (useSetObject) { ps.setObject(paramIndex, null);