ResultSet 转为 List或者JavaBean

一、将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中使用的是内省方式,而不是直接使用反射。

 

你可能感兴趣的:(ResultSet)