From 8922da3af60ba17084383eace6b80bc9ac7eccd0 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 12 Sep 2014 16:27:48 +0200 Subject: [PATCH] Generalized workaround for JDBC 4.1 getObject(index, requiredType) failures on MySQL and Derby Issue: SPR-12174 Issue: SPR-12157 --- .../org/springframework/jdbc/support/JdbcUtils.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/JdbcUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/JdbcUtils.java index 89e9b03180..4eb79cc25c 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/JdbcUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/JdbcUtils.java @@ -25,7 +25,6 @@ import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.ResultSet; import java.sql.ResultSetMetaData; -import java.sql.SQLDataException; import java.sql.SQLException; import java.sql.SQLFeatureNotSupportedException; import java.sql.Statement; @@ -197,14 +196,14 @@ public abstract class JdbcUtils { try { return rs.getObject(index, requiredType); } - catch (SQLDataException ex) { - logger.debug("JDBC driver has limited support for JDBC 4.1 'getObject(int, Class)' method", ex); + catch (AbstractMethodError err) { + logger.debug("JDBC driver does not implement JDBC 4.1 'getObject(int, Class)' method", err); } catch (SQLFeatureNotSupportedException ex) { logger.debug("JDBC driver does not support JDBC 4.1 'getObject(int, Class)' method", ex); } - catch (AbstractMethodError err) { - logger.debug("JDBC driver does not implement JDBC 4.1 'getObject(int, Class)' method", err); + catch (SQLException ex) { + logger.debug("JDBC driver has limited support for JDBC 4.1 'getObject(int, Class)' method", ex); } } // Fall back to getObject without type specification... @@ -219,7 +218,7 @@ public abstract class JdbcUtils { * Retrieve a JDBC column value from a ResultSet, using the most appropriate * value type. The returned value should be a detached value object, not having * any ties to the active ResultSet: in particular, it should not be a Blob or - * Clob object but rather a byte array respectively String representation. + * Clob object but rather a byte array or String representation, respectively. *

Uses the {@code getObject(index)} method, but includes additional "hacks" * to get around Oracle 10g returning a non-standard object for its TIMESTAMP * datatype and a {@code java.sql.Date} for DATE columns leaving out the