Defensively uses JDBC 3.0 getParameterType call for Oracle driver compatibility

Issue: SPR-10385
This commit is contained in:
Juergen Hoeller 2013-03-19 11:14:33 +01:00
parent ff6d7a858e
commit 6b4c29cd24
1 changed files with 9 additions and 15 deletions

View File

@ -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);