以下是 _recordMappingToMap的源代码:/**
* 将ResultSet结果集中的记录映射到Map对象中.
*
* @param fieldClassName 是JDBC API中的类型名称,
* @param fieldName 是字段名,
* @param rs 是一个ResultSet查询结果集,
* @param fieldValue Map对象,用于存贮一条记录.
* @throws SQLException
*/
private void _recordMappingToMap(String fieldClassName, String fieldName, ResultSet rs, Map fieldValue) throws SQLException {
fieldName = fieldName.toLowerCase();
//优先规则:常用类型靠前
if (fieldClassName.equals("java.lang.String")) {
String s = rs.getString(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Integer")) {
int s = rs.getInt(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);//早期jdk需要包装,jdk1.5后不需要包装
}
} else if (fieldClassName.equals("java.lang.Long")) {
long s = rs.getLong(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Boolean")) {
boolean s = rs.getBoolean(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Short")) {
short s = rs.getShort(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Float")) {
float s = rs.getFloat(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Double")) {
double s = rs.getDouble(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Timestamp")) {
java.sql.Timestamp s = rs.getTimestamp(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Date") || fieldClassName.equals("java.util.Date")) {
java.util.Date s = rs.getDate(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Time")) {
java.sql.Time s = rs.getTime(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Byte")) {
byte s = rs.getByte(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, new Byte(s));
}
} else if (fieldClassName.equals("[B") || fieldClassName.equals("byte[]")) {
//byte[]出现在SQL Server中
byte[] s = rs.getBytes(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.math.BigDecimal")) {
BigDecimal s = rs.getBigDecimal(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.lang.Object")
|| fieldClassName.equals("oracle.sql.STRUCT")) {
Object s = rs.getObject(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Array")
|| fieldClassName.equals("oracle.sql.ARRAY")) {
java.sql.Array s = rs.getArray(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Clob")) {
java.sql.Clob s = rs.getClob(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else if (fieldClassName.equals("java.sql.Blob")) {
java.sql.Blob s = rs.getBlob(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
} else {//对于其它任何未知类型的处理
Object s = rs.getObject(fieldName);
if (rs.wasNull()) {
fieldValue.put(fieldName, null);
} else {
fieldValue.put(fieldName, s);
}
}
}说明一点,对于一些极少数未知的数据库供应商特有的Java类类型的数据将以Object类型保存在Map对象中。