added metadata override to NUMERIC for NUMBER columns reported as DECIMAL but with zero decimal places (SPR-6912)

master
Thomas Risberg 15 years ago
parent e22431188b
commit 2ff2f0205d
  1. 26
      org.springframework.jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java

@ -19,6 +19,7 @@ package org.springframework.jdbc.core.metadata;
import java.sql.DatabaseMetaData; import java.sql.DatabaseMetaData;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
@ -346,10 +347,29 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider {
metaDataTableName, metaDataTableName,
null); null);
while (tableColumns.next()) { while (tableColumns.next()) {
String columnName = tableColumns.getString("COLUMN_NAME");
int dataType = tableColumns.getInt("DATA_TYPE");
if (dataType == Types.DECIMAL) {
String typeName = tableColumns.getString("TYPE_NAME");
int decimalDigits = tableColumns.getInt("DECIMAL_DIGITS");
// override a DECIMAL data type for no-decimal numerics
// (this is for better Oracle support where there have been issues
// using DECIMAL for certain inserts (see SPR-6912))
if ("NUMBER".equals(typeName) && decimalDigits == 0) {
dataType = Types.NUMERIC;
if (logger.isDebugEnabled()) {
logger.debug("Overriding metadata: "
+ columnName +
" now using NUMERIC instead of DECIMAL"
);
}
}
}
boolean nullable = tableColumns.getBoolean("NULLABLE");
TableParameterMetaData meta = new TableParameterMetaData( TableParameterMetaData meta = new TableParameterMetaData(
tableColumns.getString("COLUMN_NAME"), columnName,
tableColumns.getInt("DATA_TYPE"), dataType,
tableColumns.getBoolean("NULLABLE") nullable
); );
insertParameterMetaData.add(meta); insertParameterMetaData.add(meta);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {

Loading…
Cancel
Save