JDBC中将ResultSet转换为List

这段代码是根据网上的一段代码更改而成的。原来的代码上有些bug。改了一点点,用起来还可以,现在发发代码。

 

package com.util.db; import java.lang.reflect.Method; import java.sql.Date; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; /** * 结构集工具类 * * @author 陈新杰 * */ public class ResultSetUtil { /** * 将数据集装换为集合 * * @param rs * 将数据集 * @param cls * 集合中的类对象 * @param rowCount * 需要装换的行数 * @return */ public static List changeResultSet2List(ResultSet rs, Class cls, int rowCount) { try { List lst = new ArrayList(); // 用于获取列数、或者列类型 ResultSetMetaData meta = rs.getMetaData(); Object obj = null; for (int j = 0; j < rowCount; j++) { if (rs.next()) { // 获取formbean实例对象 obj = Class.forName(cls.getName()).newInstance(); // 用Class.forName方法实例化对象和new创建实例化对象是有很大区别的,它要求JVM首先从类加载器中查找类,然后再实例化,并且能执行类中的静态方法。而new仅仅是新建一个对象实例 // 循环获取指定行的每一列的信息 for (int i = 1; i <= meta.getColumnCount(); i++) { // 当前列名 String colName = meta.getColumnName(i); System.out.println(colName); // 将列名第一个字母大写 colName = new String(colName.charAt(0) + "") .toUpperCase() + colName.substring(1); // 设置方法名 String methodName = "set" + colName; System.out.println(methodName); // 获取当前位置的值,返回Object类型 Object value = rs.getObject(i); System.out.println(value.getClass()); // 利用反射获取对象 /* * Method method = obj.getClass().getMethod(methodName, * value.getClass()); */ if (value.getClass() == String.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new String[]{rs .getString(colName)}); } else if (value.getClass() == Integer.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new Integer[]{new Integer(rs .getInt(colName))}); } else if (value.getClass() == float.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new Float[]{new Float(rs .getFloat(colName))}); } else if (value.getClass() == long.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new Long[]{new Long(rs .getLong(colName))}); } else if (value.getClass() == double.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new Double[]{new Double(rs .getDouble(colName))}); } else if (value.getClass() == Date.class) { Method method = obj.getClass().getMethod( methodName, value.getClass()); method.invoke(obj, new Date[]{rs.getDate(colName)}); } // method.invoke(obj, value); } lst.add(obj); } } return lst; } catch (Exception ex) { ex.printStackTrace(); return null; } } }

 

主要是数据类型的判断与处理比较麻烦。

你可能感兴趣的:(JDBC中将ResultSet转换为List)