Browse Source

SPR-16154 - Correctly handle NVARCHAR, LONGNVARCHAR and NCLOBs

pull/1586/head
jmaxwell 7 years ago
parent
commit
e4c5b77de7
  1. 15
      spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java

15
spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java

@ -295,10 +295,12 @@ public abstract class StatementCreatorUtils { @@ -295,10 +295,12 @@ public abstract class StatementCreatorUtils {
else if (inValue instanceof SqlValue) {
((SqlValue) inValue).setValue(ps, paramIndex);
}
else if (sqlType == Types.VARCHAR || sqlType == Types.NVARCHAR ||
sqlType == Types.LONGVARCHAR || sqlType == Types.LONGNVARCHAR) {
else if (sqlType == Types.VARCHAR || sqlType == Types.LONGVARCHAR ) {
ps.setString(paramIndex, inValue.toString());
}
else if (sqlType == Types.NVARCHAR || sqlType == Types.LONGNVARCHAR) {
ps.setNString(paramIndex, inValue.toString());
}
else if ((sqlType == Types.CLOB || sqlType == Types.NCLOB) && isStringValue(inValue.getClass())) {
String strVal = inValue.toString();
if (strVal.length() > 4000) {
@ -312,9 +314,16 @@ public abstract class StatementCreatorUtils { @@ -312,9 +314,16 @@ public abstract class StatementCreatorUtils {
}
return;
}
// Fallback: regular setString binding
else {
// Fallback: setString or setNString binding
if (sqlType == Types.NCLOB) {
ps.setNString(paramIndex, strVal);
}
else {
ps.setString(paramIndex, strVal);
}
}
}
else if (sqlType == Types.DECIMAL || sqlType == Types.NUMERIC) {
if (inValue instanceof BigDecimal) {
ps.setBigDecimal(paramIndex, (BigDecimal) inValue);

Loading…
Cancel
Save