解
答案比使用
getmetaData方法要复杂得多,因为方法返回的整数类型
getmetaData和完整的类名没有直接映射。该解决方案需要两段代码:
- 实现一种获取
java.sql.Types
常量整数值的方法。 - 创建一个将该值转换为类名的方法。
Java类型方法
以下方法检索元信息:
public String getJavaType( String schema, String object, String column ) throws Exception { String fullName = schema + '.' + object + '.' + column; DatabasemetaData metaData = getConnection().getmetaData(); ResultSet columnmeta = metaData.getColumns( null, schema, object, column ); String javaType = null; if( columnmeta.first() ) { int dataType = columnmeta.getInt( "DATA_TYPE" ); javaType = SQLTypeMap.convert( dataType ); } else { throw new Exception( "Unknown database column " + fullName + '.' ); } return javaType; }静态转换方法
常量整数值必须转换为类名。这可以通过以下方式完成:
import java.sql.Types;public class SQLTypeMap { public static Class<?> toClass(int type) { Class<?> result = Object.class; switch (type) { case Types.CHAR: case Types.VARCHAR: case Types.LONGVARCHAR: result = String.class; break; case Types.NUMERIC: case Types.DECIMAL: result = java.math.BigDecimal.class; break; case Types.BIT: result = Boolean.class; break; case Types.TINYINT: result = Byte.class; break; case Types.SMALLINT: result = Short.class; break; case Types.INTEGER: result = Integer.class; break; case Types.BIGINT: result = Long.class; break; case Types.REAL: case Types.FLOAT: result = Float.class; break; case Types.DOUBLE: result = Double.class; break; case Types.BINARY: case Types.VARBINARY: case Types.LONGVARBINARY: result = Byte[].class; break; case Types.DATE: result = java.sql.Date.class; break; case Types.TIME: result = java.sql.Time.class; break; case Types.TIMESTAMP: result = java.sql.Timestamp.class; break; } return result; }}注意,不同的数据库在映射上可以有不同的变化。



