java list resultset_[Java教程]ResultSet 转为 List或者JavaBean

[Java教程]ResultSet 转为 List或者JavaBean

0 2014-04-22 13:00:13

一、将ResultSet结果集转换为List,其中每条记录信息保存为Map放到List中,方法如下:public static List> toMap(ResultSet rs) throws SQLException { if(rs == null) return null; List> result = new ArrayList>(); //获取结果集结构信息,字段类型、数量 ResultSetMetaData rsmd = rs.getMetaData(); int cols = rsmd.getColumnCount(); Map map = new HashMap(); while(rs.next()) { map = new HashMap(); //将一条数据库表记录转为map存储 for (int i = 1; i <= cols; i++) { map.put(rsmd.getColumnName(i), rs.getObject(i)); } result.add(map); } return result; }

二、将ResultSet结果集中的一条记录转换为JavaBeanpublic static T toBean(ResultSet rs, Class 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 type)方法,主要改进为:

1、可以动态添加(属性-->列)映射关系,例:javaBean中的desc属性对应resultSet中的t_desc列。

2、属性默认值的填充,创建javaBean后如果在resultSet没有找到对应的值,可设置默认值。

3、dbutils中使用的是内省方式,而不是直接使用反射。

本文网址:http://www.shaoqun.com/a/89202.html

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:admin@shaoqun.com。

JAVA

0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果MySQL中的字段是下划线命名法,而JavaBean的属性是驼峰式命名,可以使用以下代码将ResultSet转换成Java对象: ```java public <T> List<T> resultSetToObjects(ResultSet rs, Class<T> clazz) throws SQLException, IllegalAccessException, InstantiationException { List<T> objects = new ArrayList<>(); ResultSetMetaData metaData = rs.getMetaData(); int columnCount = metaData.getColumnCount(); Field[] fields = clazz.getDeclaredFields(); Map<String, Field> fieldMap = new HashMap<>(fields.length); for (Field field : fields) { String name = field.getName(); fieldMap.put(name, field); } while (rs.next()) { T object = clazz.newInstance(); for (int i = 1; i <= columnCount; i++) { String columnName = metaData.getColumnName(i); String fieldName = convertToCamelCase(columnName); Field field = fieldMap.get(fieldName); if (field == null) { continue; } field.setAccessible(true); Object value = rs.getObject(i); field.set(object, value); } objects.add(object); } return objects; } private String convertToCamelCase(String columnName) { StringBuilder sb = new StringBuilder(); boolean nextUpperCase = false; for (int i = 0; i < columnName.length(); i++) { char ch = columnName.charAt(i); if (ch == '_') { nextUpperCase = true; } else { if (nextUpperCase) { sb.append(Character.toUpperCase(ch)); nextUpperCase = false; } else { sb.append(Character.toLowerCase(ch)); } } } return sb.toString(); } ``` 在上面的代码中,我们使用了ResultSetMetaData来获取ResultSet中的列数和列名,然后使用convertToCamelCase方法将列名转换成JavaBean属性名。接着,我们使用反射获取JavaBean中的所有属性,并将它们存储到一个Map中,其中属性名作为Map的键。在遍历ResultSet时,我们将每一行数据都转换成JavaBean对象,然后遍历ResultSet中的每一列,将列名转换成JavaBean属性名,并使用反射将列值赋给JavaBean对象的属性。最后,将JavaBean对象添加到List中并返回。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值