Modified: db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java URL: http://svn.apache.org/viewcvs/db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java?rev=398747&r1=398746&r2=398747&view=diff ============================================================================== --- db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java (original) +++ db/ojb/branches/OJB_1_0_RELEASE/src/java/org/apache/ojb/broker/metadata/JdbcTypesHelper.java Mon May 1 17:13:01 2006 @@ -15,36 +15,26 @@ * limitations under the License. */ -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.lang.reflect.Field; import java.math.BigDecimal; import java.net.URL; import java.sql.Blob; -import java.sql.CallableStatement; import java.sql.Clob; import java.sql.Date; import java.sql.Ref; -import java.sql.ResultSet; -import java.sql.SQLException; import java.sql.Struct; import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; import java.util.HashMap; -import java.util.Map; import java.util.Locale; +import java.util.Map; -import org.apache.commons.lang.BooleanUtils; -import org.apache.commons.lang.builder.ToStringBuilder; import org.apache.ojb.broker.OJBRuntimeException; -import org.apache.ojb.broker.util.SqlHelper; -import org.apache.ojb.broker.util.sequence.SequenceManagerException; +import org.apache.ojb.broker.metadata.fieldaccess.PersistentField; /** - * Helper class which provide all supported [EMAIL PROTECTED] JdbcType} classes - * (based on the [EMAIL PROTECTED] java.sql.Types}) as inner classes. + * Helps to manage the [EMAIL PROTECTED] JdbcType} implementation classes. * * @see JdbcType * @version $Id$ @@ -59,34 +49,34 @@ */ static { - setJdbcType("array", Types.ARRAY, new T_Array()); - setJdbcType("bigint", Types.BIGINT, new T_BigInt()); - setJdbcType("binary", Types.BINARY, new T_Binary()); - setJdbcType("bit", Types.BIT, new T_Bit()); - setJdbcType("blob", Types.BLOB, new T_Blob()); - setJdbcType("char", Types.CHAR, new T_Char()); - setJdbcType("clob", Types.CLOB, new T_Clob()); - setJdbcType("date", Types.DATE, new T_Date()); - setJdbcType("decimal", Types.DECIMAL, new T_Decimal()); - setJdbcType("double", Types.DOUBLE, new T_Double()); - setJdbcType("float", Types.FLOAT, new T_Float()); - setJdbcType("integer", Types.INTEGER, new T_Integer()); - setJdbcType("longvarbinary", Types.LONGVARBINARY, new T_LongVarBinary()); - setJdbcType("longvarchar", Types.LONGVARCHAR, new T_LongVarChar()); - setJdbcType("numeric", Types.NUMERIC, new T_Numeric()); - setJdbcType("real", Types.REAL, new T_Real()); - setJdbcType("ref", Types.REF, new T_Ref()); - setJdbcType("smallint", Types.SMALLINT, new T_SmallInt()); - setJdbcType("struct", Types.STRUCT, new T_Struct()); - setJdbcType("time", Types.TIME, new T_Time()); - setJdbcType("timestamp", Types.TIMESTAMP, new T_Timestamp()); - setJdbcType("tinyint", Types.TINYINT, new T_TinyInt()); - setJdbcType("varbinary", Types.VARBINARY, new T_VarBinary()); - setJdbcType("varchar", Types.VARCHAR, new T_Varchar()); + setJdbcType("array", Types.ARRAY, new JdbcTypes.T_Array()); + setJdbcType("bigint", Types.BIGINT, new JdbcTypes.T_BigInt()); + setJdbcType("binary", Types.BINARY, new JdbcTypes.T_Binary()); + setJdbcType("bit", Types.BIT, new JdbcTypes.T_Bit()); + setJdbcType("blob", Types.BLOB, new JdbcTypes.T_Blob()); + setJdbcType("char", Types.CHAR, new JdbcTypes.T_Char()); + setJdbcType("clob", Types.CLOB, new JdbcTypes.T_Clob()); + setJdbcType("date", Types.DATE, new JdbcTypes.T_Date()); + setJdbcType("decimal", Types.DECIMAL, new JdbcTypes.T_Decimal()); + setJdbcType("double", Types.DOUBLE, new JdbcTypes.T_Double()); + setJdbcType("float", Types.FLOAT, new JdbcTypes.T_Float()); + setJdbcType("integer", Types.INTEGER, new JdbcTypes.T_Integer()); + setJdbcType("longvarbinary", Types.LONGVARBINARY, new JdbcTypes.T_LongVarBinary()); + setJdbcType("longvarchar", Types.LONGVARCHAR, new JdbcTypes.T_LongVarChar()); + setJdbcType("numeric", Types.NUMERIC, new JdbcTypes.T_Numeric()); + setJdbcType("real", Types.REAL, new JdbcTypes.T_Real()); + setJdbcType("ref", Types.REF, new JdbcTypes.T_Ref()); + setJdbcType("smallint", Types.SMALLINT, new JdbcTypes.T_SmallInt()); + setJdbcType("struct", Types.STRUCT, new JdbcTypes.T_Struct()); + setJdbcType("time", Types.TIME, new JdbcTypes.T_Time()); + setJdbcType("timestamp", Types.TIMESTAMP, new JdbcTypes.T_Timestamp()); + setJdbcType("tinyint", Types.TINYINT, new JdbcTypes.T_TinyInt()); + setJdbcType("varbinary", Types.VARBINARY, new JdbcTypes.T_VarBinary()); + setJdbcType("varchar", Types.VARCHAR, new JdbcTypes.T_Varchar()); //#ifdef JDBC30 - setJdbcType("boolean", Types.BOOLEAN, new T_Boolean()); - setJdbcType("datalink", Types.DATALINK, new T_Datalink()); + setJdbcType("boolean", Types.BOOLEAN, new JdbcTypes.T_Boolean()); + setJdbcType("datalink", Types.DATALINK, new JdbcTypes.T_Datalink()); //#endif } @@ -148,6 +138,29 @@ } return result; } + + /** + * Lookup the [EMAIL PROTECTED] JdbcType} by name. If name was not found an exception + * is thrown. + * + * @param typeName The name of the JDBC type as String, e.g. 'bigint', 'integer'... + */ + public static JdbcType getJdbcTypeByName(String typeName, PersistentField field) + { + /* + arminw: + Some user reported problems when using OJB with non-default Localization. The + conversion of sql type names e.g. Turkish 'BIGINT' to lower case will not match 'bigint' + Hope that the specification of the localization will fix this. + */ + JdbcType result = (JdbcType) jdbcObjectTypesFromName.get(typeName.toLowerCase(Locale.ENGLISH)); + if (result == null) + { + throw new OJBRuntimeException("The type " + typeName + " can not be handled by OJB." + + " Please specify only types as defined by java.sql.Types."); + } + return result; + } /** * Set the [EMAIL PROTECTED] JdbcType} by name. @@ -166,29 +179,34 @@ * * @see FieldDescriptor#getJdbcType */ - public static JdbcType getJdbcTypeByReflection(String fieldType) + public static JdbcType getJdbcTypeByReflection(PersistentField fld) { JdbcType result; - + String fieldType = fld.getType().getName(); + if (fieldType.equalsIgnoreCase(Character.class.getName()) || fieldType.equalsIgnoreCase("char")) result = getJdbcTypeByName("char"); - else if (fieldType.equalsIgnoreCase(Short.class.getName()) || fieldType.equalsIgnoreCase("short")) - result = getJdbcTypeByName("smallint"); + else if (fieldType.equalsIgnoreCase(String.class.getName())) + result = getJdbcTypeByName("varchar"); + else if (fieldType.equalsIgnoreCase(Integer.class.getName()) || fieldType.equalsIgnoreCase("int")) result = getJdbcTypeByName("integer"); else if (fieldType.equalsIgnoreCase(Long.class.getName()) || fieldType.equalsIgnoreCase("long")) result = getJdbcTypeByName("bigint"); + else if (fieldType.equalsIgnoreCase(Boolean.class.getName()) || fieldType.equalsIgnoreCase("boolean")) + result = getJdbcTypeByName("bit"); + else if (fieldType.equalsIgnoreCase(BigDecimal.class.getName())) + result = getJdbcTypeByName("decimal"); + else if (fieldType.equalsIgnoreCase(Short.class.getName()) || fieldType.equalsIgnoreCase("short")) + result = getJdbcTypeByName("smallint"); else if (fieldType.equalsIgnoreCase(Byte.class.getName()) || fieldType.equalsIgnoreCase("byte")) result = getJdbcTypeByName("tinyint"); + else if (fieldType.equalsIgnoreCase(Float.class.getName()) || fieldType.equalsIgnoreCase("float")) result = getJdbcTypeByName("real"); else if (fieldType.equalsIgnoreCase(Double.class.getName()) || fieldType.equalsIgnoreCase("double")) result = getJdbcTypeByName("float"); - else if (fieldType.equalsIgnoreCase(String.class.getName())) - result = getJdbcTypeByName("varchar"); - /* - TODO: arminw: useful? This only will work in conjunction with a FieldConversion - */ + else if (fieldType.equalsIgnoreCase(java.util.Date.class.getName())) result = getJdbcTypeByName("date"); else if (fieldType.equalsIgnoreCase(Date.class.getName())) @@ -197,14 +215,16 @@ result = getJdbcTypeByName("time"); else if (fieldType.equalsIgnoreCase(Timestamp.class.getName())) result = getJdbcTypeByName("timestamp"); - else if (fieldType.equalsIgnoreCase(BigDecimal.class.getName())) - result = getJdbcTypeByName("decimal"); + + else if (fieldType.equalsIgnoreCase(Blob.class.getName())) + result = getJdbcTypeByName("blob"); + else if (fieldType.equalsIgnoreCase(Clob.class.getName())) + result = getJdbcTypeByName("clob"); + else if (fieldType.equalsIgnoreCase(Ref.class.getName())) result = getJdbcTypeByName("ref"); else if (fieldType.equalsIgnoreCase(Struct.class.getName())) result = getJdbcTypeByName("struct"); - else if (fieldType.equalsIgnoreCase(Boolean.class.getName()) || fieldType.equalsIgnoreCase("boolean")) - result = getJdbcTypeByName("bit"); //#ifdef JDBC30 else if (fieldType.equalsIgnoreCase(URL.class.getName())) result = getJdbcTypeByName("datalink"); @@ -216,28 +236,28 @@ } - /** - * Returns an java object read from the specified ResultSet column. - */ - public static Object getObjectFromColumn(ResultSet rs, Integer jdbcType, int columnId) - throws SQLException - { - return getObjectFromColumn(rs, null, jdbcType, null, columnId); - } - - /** - * Returns an java object for the given jdbcType by extract from the given - * CallableStatement or ResultSet. - * NOTE: Exactly one of the arguments of type CallableStatement or ResultSet - * have to be non-null. - * If the 'columnId' argument is equals [EMAIL PROTECTED] JdbcType#MIN_INT}, then the given 'columnName' - * argument is used to lookup column. Else the given 'columnId' is used as column index. - */ - private static Object getObjectFromColumn(ResultSet rs, CallableStatement stmt, Integer jdbcType, String columnName, int columnId) - throws SQLException - { - return getJdbcTypeByTypesIndex(jdbcType).getObjectFromColumn(rs, stmt, columnName, columnId); - } +// /** +// * Returns an java object read from the specified ResultSet column. +// */ +// public static Object getObjectFromColumn(ResultSet rs, Integer jdbcType, int columnId) +// throws SQLException +// { +// return getObjectFromColumn(rs, null, jdbcType, null, columnId); +// } +// +// /** +// * Returns an java object for the given jdbcType by extract from the given +// * CallableStatement or ResultSet. +// * NOTE: Exactly one of the arguments of type CallableStatement or ResultSet +// * have to be non-null. +// * If the 'columnId' argument is equals [EMAIL PROTECTED] JdbcType#MIN_INT}, then the given 'columnName' +// * argument is used to lookup column. Else the given 'columnId' is used as column index. +// */ +// private static Object getObjectFromColumn(ResultSet rs, CallableStatement stmt, Integer jdbcType, String columnName, int columnId) +// throws SQLException +// { +// return getJdbcTypeByTypesIndex(jdbcType).getObjectFromColumn(rs, stmt, columnName, columnId); +// } /** * Returns a string representation of the given [EMAIL PROTECTED] java.sql.Types} value. @@ -264,1098 +284,120 @@ return statusName; } - - //====================================================================================== - // inner classes implementing JdbcType interface - //====================================================================================== - - public abstract static class BaseType implements JdbcType + /** + * Returns a [EMAIL PROTECTED] org.apache.ojb.broker.metadata.FieldType} instance for the given sql type + * (see [EMAIL PROTECTED] java.sql.Types}) as specified in JDBC 3.0 specification + * (see JDBC 3.0 specification <em>Appendix B, Data Type Conversion Tables</em>). + * + * @param jdbcType Specify the type to look for. + * @return A new specific [EMAIL PROTECTED] org.apache.ojb.broker.metadata.FieldType} instance. + */ + static FieldType newFieldType(JdbcType jdbcType) { - private FieldType fieldType; - - protected BaseType() - { - fieldType = FieldTypeClasses.newFieldType(this); - } - - abstract Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException; - - abstract Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException; - - abstract Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException; - /* - only supported by jdk >= 1.4x, maybe useful in further versions - */ - // abstract Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException; - - public boolean equals(Object obj) - { - if (this == obj) return true; - boolean result = false; - if (obj instanceof JdbcType) - { - result = this.getType() == ((JdbcType) obj).getType(); - } - return result; - } - - public int hashCode() - { - return getType(); - } - - public FieldType getFieldType() - { - return fieldType; - } - - public Object getObjectFromColumn(CallableStatement stmt, int columnId) throws SQLException - { - return getObjectFromColumn(null, stmt, null, columnId); - } - - public Object getObjectFromColumn(ResultSet rs, String columnName) throws SQLException - { - return getObjectFromColumn(rs, null, columnName, MIN_INT); - } - - public Object getObjectFromColumn(ResultSet rs, int columnId) throws SQLException - { - return getObjectFromColumn(rs, null, null, columnId); - } - - public Object getObjectFromColumn(final ResultSet rs, final CallableStatement stmt, - final String columnName, int columnIndex) throws SQLException - { - if (stmt != null) - { - if (columnIndex == MIN_INT) - { - throw new UnsupportedOperationException("Not implemented yet"); - } - else - { - return readValueFromStatement(stmt, columnIndex); - } - } - else - { - return columnIndex == MIN_INT ? - readValueFromResultSet(rs, SqlHelper.stripOjbQuotes(columnName)) - : readValueFromResultSet(rs, columnIndex); - } - } - - public String toString() + FieldType result; + switch(jdbcType.getType()) { - return new ToStringBuilder(this) - .append("jdbcType", getType()) - .append("jdbcTypeString", getSqlTypeAsString(getType())) - .append("associatedFieldType", getFieldType()) - .toString(); - } - -// // not used in code, but maybe useful in further versions -// public Object getObjectFromColumn(CallableStatement stmt, String columnName) throws SQLException -// { -// return getObjectFromColumn(null, stmt, columnName, MIN_INT); -// } + case Types.ARRAY: + result = new FieldTypes.ArrayFieldType(); + break; + case Types.BIGINT: + result = new FieldTypes.LongFieldType(); + break; + case Types.BINARY: + result = new FieldTypes.ByteArrayFieldType(); + break; + case Types.BIT: + result = new FieldTypes.BooleanFieldType(); + break; + case Types.BLOB: + result = new FieldTypes.BlobFieldType(); + break; + case Types.CHAR: + result = new FieldTypes.StringFieldType(); + break; + case Types.CLOB: + result = new FieldTypes.ClobFieldType(); + break; + case Types.DATE: + result = new FieldTypes.DateFieldType(); + break; + case Types.DECIMAL: + result = new FieldTypes.BigDecimalFieldType(); + break; +// Not needed, user have to use the underlying sql datatype in OJB mapping files +// case Types.DISTINCT: +// result = new DistinctFieldType(); +// break; + case Types.DOUBLE: + result = new FieldTypes.DoubleFieldType(); + break; + case Types.FLOAT: + result = new FieldTypes.FloatFieldType(); + break; + case Types.INTEGER: + result = new FieldTypes.IntegerFieldType(); + break; + case Types.JAVA_OBJECT: + result = new FieldTypes.JavaObjectFieldType(); + break; + case Types.LONGVARBINARY: + result = new FieldTypes.ByteArrayFieldType(); + break; + case Types.LONGVARCHAR: + result = new FieldTypes.StringFieldType(); + break; + case Types.NUMERIC: + result = new FieldTypes.BigDecimalFieldType(); + break; + case Types.REAL: + result = new FieldTypes.FloatFieldType(); + break; + case Types.REF: + result = new FieldTypes.RefFieldType(); + break; + case Types.SMALLINT: + result = new FieldTypes.ShortFieldType(); + break; + case Types.STRUCT: + result = new FieldTypes.StructFieldType(); + break; + case Types.TIME: + result = new FieldTypes.TimeFieldType(); + break; + case Types.TIMESTAMP: + result = new FieldTypes.TimestampFieldType(); + break; + case Types.TINYINT: + result = new FieldTypes.ByteFieldType(); + break; + case Types.VARBINARY: + result = new FieldTypes.ByteArrayFieldType(); + break; + case Types.VARCHAR: + result = new FieldTypes.StringFieldType(); + break; + case Types.OTHER: + result = new FieldTypes.JavaObjectFieldType(); + break; // -// public Object getObjectFromColumn(ResultSet rs, int columnId) throws SQLException -// { -// return getObjectFromColumn(rs, null, null, columnId); -// } - - } - - - public static final class T_Char extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getString(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getString(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getString(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getString(columnIndex); - } - - public int getType() - { - return Types.CHAR; - } - } - - public static final class T_Varchar extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getString(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getString(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getString(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getString(columnIndex); - } - - public int getType() - { - return Types.VARCHAR; - } - } - - public static final class T_LongVarChar extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getString(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getString(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getString(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getString(columnIndex); - } - - public int getType() - { - return Types.LONGVARCHAR; - } - } - - public static final class T_Numeric extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new BigDecimal(identifier.longValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getBigDecimal(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getBigDecimal(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getBigDecimal(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getBigDecimal(columnIndex); - } - - public int getType() - { - return Types.NUMERIC; - } - } - - public static final class T_Decimal extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new BigDecimal(identifier.longValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getBigDecimal(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getBigDecimal(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getBigDecimal(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getBigDecimal(columnIndex); - } - - public int getType() - { - return Types.DECIMAL; - } - } - - public static final class T_Bit extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'BIT'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// boolean temp = stmt.getBoolean(columnName); -// return (stmt.wasNull() ? null : new Boolean(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - boolean temp = stmt.getBoolean(columnIndex); - return (stmt.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - boolean temp = rs.getBoolean(columnName); - return (rs.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - boolean temp = rs.getBoolean(columnIndex); - return (rs.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - public int getType() - { - return Types.BIT; - } - } +// case Types.NULL: +// result = new NullFieldType(); +// break; //#ifdef JDBC30 - public static final class T_Boolean extends BaseType - { - public Object sequenceKeyConversion(final Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'BOOLEAN'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// boolean temp = stmt.getBoolean(columnName); -// return (stmt.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - boolean temp = stmt.getBoolean(columnIndex); - return (stmt.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - boolean temp = rs.getBoolean(columnName); - return (rs.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - boolean temp = rs.getBoolean(columnIndex); - return (rs.wasNull() ? null : BooleanUtils.toBooleanObject(temp)); - } - - public int getType() - { - return Types.BOOLEAN; - } - } + case Types.BOOLEAN: + result = new FieldTypes.BooleanFieldType(); + break; + case Types.DATALINK: + result = new FieldTypes.URLFieldType(); + break; //#endif - - public static final class T_TinyInt extends BaseType - { - public Object sequenceKeyConversion(final Long identifier) - { - return new Byte(identifier.byteValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// byte temp = stmt.getByte(columnName); -// return (stmt.wasNull() ? null : new Byte(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - byte temp = stmt.getByte(columnIndex); - return (stmt.wasNull() ? null : new Byte(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - byte temp = rs.getByte(columnName); - return (rs.wasNull() ? null : new Byte(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - byte temp = rs.getByte(columnIndex); - return (rs.wasNull() ? null : new Byte(temp)); - } - - public int getType() - { - return Types.TINYINT; + default: + throw new OJBRuntimeException("Unkown or not supported field type specified, specified jdbc type was '" + + jdbcType + "', as string: " + JdbcTypesHelper.getSqlTypeAsString(jdbcType.getType())); } + // make sure that the sql type was set + //result.setSqlType(jdbcType); + return result; } - - public static final class T_SmallInt extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Short(identifier.shortValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// short temp = stmt.getShort(columnName); -// return (stmt.wasNull() ? null : new Short(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - short temp = stmt.getShort(columnIndex); - return (stmt.wasNull() ? null : new Short(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - short temp = rs.getShort(columnName); - return (rs.wasNull() ? null : new Short(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - short temp = rs.getShort(columnIndex); - return (rs.wasNull() ? null : new Short(temp)); - } - - public int getType() - { - return Types.SMALLINT; - } - } - - public static final class T_Integer extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Integer(identifier.intValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// int temp = stmt.getInt(columnName); -// return (stmt.wasNull() ? null : new Integer(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - int temp = stmt.getInt(columnIndex); - return (stmt.wasNull() ? null : new Integer(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - int temp = rs.getInt(columnName); - return (rs.wasNull() ? null : new Integer(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - int temp = rs.getInt(columnIndex); - return (rs.wasNull() ? null : new Integer(temp)); - } - - public int getType() - { - return Types.INTEGER; - } - } - - public static final class T_BigInt extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier; - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// long temp = stmt.getLong(columnName); -// return (stmt.wasNull() ? null : new Long(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - long temp = stmt.getLong(columnIndex); - return (stmt.wasNull() ? null : new Long(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - long temp = rs.getLong(columnName); - return (rs.wasNull() ? null : new Long(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - long temp = rs.getLong(columnIndex); - return (rs.wasNull() ? null : new Long(temp)); - } - - public int getType() - { - return Types.BIGINT; - } - } - - public static final class T_Real extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Float(identifier.floatValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// float temp = stmt.getFloat(columnName); -// return (stmt.wasNull() ? null : new Float(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - float temp = stmt.getFloat(columnIndex); - return (stmt.wasNull() ? null : new Float(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - float temp = rs.getFloat(columnName); - return (rs.wasNull() ? null : new Float(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - float temp = rs.getFloat(columnIndex); - return (rs.wasNull() ? null : new Float(temp)); - } - - public int getType() - { - return Types.REAL; - } - } - - public static final class T_Float extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Double(identifier.doubleValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// double temp = stmt.getDouble(columnName); -// return (stmt.wasNull() ? null : new Double(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - double temp = stmt.getDouble(columnIndex); - return (stmt.wasNull() ? null : new Double(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - double temp = rs.getDouble(columnName); - return (rs.wasNull() ? null : new Double(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - double temp = rs.getDouble(columnIndex); - return (rs.wasNull() ? null : new Double(temp)); - } - - public int getType() - { - return Types.FLOAT; - } - } - - public static final class T_Double extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Double(identifier.doubleValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// double temp = stmt.getDouble(columnName); -// return (stmt.wasNull() ? null : new Double(temp)); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - double temp = stmt.getDouble(columnIndex); - return (stmt.wasNull() ? null : new Double(temp)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - double temp = rs.getDouble(columnName); - return (rs.wasNull() ? null : new Double(temp)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - double temp = rs.getDouble(columnIndex); - return (rs.wasNull() ? null : new Double(temp)); - } - - public int getType() - { - return Types.DOUBLE; - } - } - - public static final class T_Binary extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString().getBytes(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getBytes(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getBytes(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getBytes(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getBytes(columnIndex); - } - - public int getType() - { - return Types.BINARY; - } - } - - public static final class T_VarBinary extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString().getBytes(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getBytes(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getBytes(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getBytes(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getBytes(columnIndex); - } - - public int getType() - { - return Types.VARBINARY; - } - } - - public static final class T_LongVarBinary extends BaseType - { - protected static final int BUFSZ = 2048; - - /** - * Retrieve LONGVARBINARY InputStream data and pack into a byte array. - * - * @param is the input stream to be retrieved - * @return a string containing the clob data - * @throws java.sql.SQLException if conversion fails or the clob cannot be read - */ - protected static byte[] retrieveStreamDataFromRs(InputStream is) throws SQLException - { - if (is == null) - { - return null; - } - byte[] bytes = null; - ByteArrayOutputStream bos = null; - try - { - bos = new ByteArrayOutputStream(); - int numRead; - byte[] buf = new byte[BUFSZ]; - while ((numRead = is.read(buf, 0, buf.length)) > 0) - { - bos.write(buf, 0, numRead); - } - bytes = bos.toByteArray(); - } - catch (IOException e) - { - throw new SQLException("I/O exception retrieving LONGVARBINARY: " + e.getLocalizedMessage()); - } - finally - { - if (bos != null) - { - try - { - bos.close(); - } - catch (Exception ignored) - { - //ignore - } - } - } - return bytes; - } - - public Object sequenceKeyConversion(Long identifier) - { - return identifier.toString().getBytes(); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getBytes(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getBytes(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return retrieveStreamDataFromRs(rs.getBinaryStream(columnName)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return retrieveStreamDataFromRs(rs.getBinaryStream(columnIndex)); - } - - public int getType() - { - return Types.LONGVARBINARY; - } - } - - public static final class T_Date extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Date(identifier.longValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getDate(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getDate(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getDate(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getDate(columnIndex); - } - - public int getType() - { - return Types.DATE; - } - } - - public static final class T_Time extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Time(identifier.longValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getTime(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getTime(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getTime(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getTime(columnIndex); - } - - public int getType() - { - return Types.TIME; - } - } - - public static final class T_Timestamp extends BaseType - { - public Object sequenceKeyConversion(Long identifier) - { - return new Timestamp(identifier.longValue()); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getTimestamp(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getTimestamp(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getTimestamp(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getTimestamp(columnIndex); - } - - public int getType() - { - return Types.TIMESTAMP; - } - } - - public static final class T_Clob extends BaseType - { - protected static final int BUFSZ = 32768; - - /** - * Convert CLOB to String. Safe for very large objects. - * - * @param aClob clob with character data - * @return a string containing the clob data - * @throws java.sql.SQLException if conversion fails or the clob cannot be read - */ - protected static String safeClobToString(Clob aClob) throws SQLException - { - long length = aClob.length(); - if (length == 0) - { - return ""; - } - StringBuffer sb = new StringBuffer(); - char[] buf = new char[BUFSZ]; - java.io.Reader stream = aClob.getCharacterStream(); - try - { - int numRead; - while ((numRead = stream.read(buf)) != -1) - { - sb.append(buf, 0, numRead); - } - stream.close(); - } - catch (IOException e) - { - throw new SQLException(e.getLocalizedMessage()); - } - return sb.toString(); - } - - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'CLOB'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// Clob aClob = stmt.getClob(columnName); -// return (stmt.wasNull() ? null : aClob.getSubString(1L, (int) aClob.length())); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - Clob aClob = stmt.getClob(columnIndex); - return (stmt.wasNull() ? null : safeClobToString(aClob)); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - Clob aClob = rs.getClob(columnName); - return (rs.wasNull() ? null : safeClobToString(aClob)); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - Clob aClob = rs.getClob(columnIndex); - return (rs.wasNull() ? null : safeClobToString(aClob)); - } - - public int getType() - { - return Types.CLOB; - } - } - - public static final class T_Blob extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'BLOB'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// Blob aBlob = stmt.getBlob(columnName); -// return (stmt.wasNull() ? null : aBlob.getBytes(1L, (int) aBlob.length())); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - Blob aBlob = stmt.getBlob(columnIndex); - return (stmt.wasNull() ? null : aBlob.getBytes(1L, (int) aBlob.length())); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - Blob aBlob = rs.getBlob(columnName); - return (rs.wasNull() ? null : aBlob.getBytes(1L, (int) aBlob.length())); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - Blob aBlob = rs.getBlob(columnIndex); - return (rs.wasNull() ? null : aBlob.getBytes(1L, (int) aBlob.length())); - } - - public int getType() - { - return Types.BLOB; - } - } - - public static final class T_Array extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'ARRAY'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getArray(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getArray(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getArray(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getArray(columnIndex); - } - - public int getType() - { - return Types.ARRAY; - } - } - - public static final class T_Struct extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'STRUCT'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getObject(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getObject(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getObject(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getObject(columnIndex); - } - - public int getType() - { - return Types.STRUCT; - } - } - - public static final class T_Ref extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'REF'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getRef(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getRef(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getRef(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getRef(columnIndex); - } - - public int getType() - { - return Types.REF; - } - } - -//#ifdef JDBC30 - public static final class T_Datalink extends BaseType - { - public Object sequenceKeyConversion(Long identifier) throws SequenceManagerException - { - throw new SequenceManagerException("Not supported sequence key type 'DATALINK'"); - } - -// Object readValueFromStatement(CallableStatement stmt, String columnName) throws SQLException -// { -// return stmt.getURL(columnName); -// } - - Object readValueFromStatement(CallableStatement stmt, int columnIndex) throws SQLException - { - return stmt.getURL(columnIndex); - } - - Object readValueFromResultSet(ResultSet rs, String columnName) throws SQLException - { - return rs.getURL(columnName); - } - - Object readValueFromResultSet(ResultSet rs, int columnIndex) throws SQLException - { - return rs.getURL(columnIndex); - } - - public int getType() - { - return Types.DATALINK; - } - } -//#endif }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
