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

 

转载于:https://www.cnblogs.com/gmou/p/3680248.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值