一、将ResultSet结果集转换为List,其中每条记录信息保存为Map放到List中,方法如下:
public static List<Map<String, Object>> toMap(ResultSet rs) throws SQLException {
if(rs == null) return null; List<Map<String, Object>> result = new ArrayList<Map<String,Object>>(); //获取结果集结构信息,字段类型、数量
ResultSetMetaData rsmd = rs.getMetaData();
int cols = rsmd.getColumnCount(); Map<String, Object> map = new HashMap<String, Object>();
while(rs.next()) {
map = new HashMap<String, Object>();
//将一条数据库表记录转为map存储
for (int i = 1; i <= cols; i++) {
map.put(rsmd.getColumnName(i), rs.getObject(i));
}
result.add(map);
}
return result;
}
二、将ResultSet结果集中的一条记录转换为JavaBean
public static <T> T toBean(ResultSet rs, Class<T> type) throws Exception { if(rs == null) return null; //获取class中定义的属性
Field[] fields = type.getDeclaredFields();
//创建java对象
T obj = type.newInstance(); //循环对象属性值
for(Field f : fields) {
Object value = rs.getObject(f.getName());
if(value != null) {
//oracle中number类型对应java中的BigDecimal类型。
if(value.getClass() == BigDecimal.class && (f.getType() == Integer.class || f.getType() == int.class)) {
value = ((BigDecimal)value).intValue();
}
f.setAccessible(true);
f.set(obj, value);
}
} return obj;
}
以上方法比较简陋,org.apache.commons.dbutils实现了较为实用的BasicRowProcessor.toBean(ResultSet rs, Class<T> type)方法,主要改进为:
1、可以动态添加(属性-->列)映射关系,例:javaBean中的desc属性对应resultSet中的t_desc列。
2、属性默认值的填充,创建javaBean后如果在resultSet没有找到对应的值,可设置默认值。
3、dbutils中使用的是内省方式,而不是直接使用反射。