此类和上篇的相同,不过此类使用反射机制实现相同的原理吧,^_^
O(∩_∩)O~~一刻
火车上两个人面对而坐,问:“抽烟吗?”答:“不抽。”问:“喝一杯吗?”答:“不喝。”问:“这是我的女儿。”答:“我不玩女人。
开始开发,高兴的工作哦
哦
package cn.com.huawei.opensource.common.dbutils;
import java.lang.reflect.Field;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.sql.SQLException;import java.util.ArrayList;import java.util.Collection;import java.util.logging.Logger;
import org.apache.commons.dbutils.ResultSetHandler;/** * * @author bailonggang * 2009-2-26 * 下午11:55:16 */public class CustomMapListResultSetHandler implements ResultSetHandler{ private static Logger logger=Logger.getLogger(CustomMapListResultSetHandler.class.getName()); private Class cls ; public CustomMapListResultSetHandler(Class cls) { this.cls=cls; } /** * */ public Object handle(ResultSet rs) throws SQLException {
得到数据集的元数据对象的 ResultSetMetaData meta=rs.getMetaData();
得到数据集合的列数的 int cols=meta.getColumnCount();
存储列名称信息 String[] titles=new String[cols]; for (int i = 0; i < titles.length; i++) {
获取列的名称的哦 titles[i]=meta.getColumnName(i+1); }
存储查询的对象集合 Collection<Object> col=new ArrayList<Object>(); while(rs.next()) { try{
使用反射常见一个是对象的实例 Object o=cls.newInstance(); for (int i = 0; i < titles.length; i++) {
得到响应的字段 Field field=cls.getDeclaredField(titles[i]); try {
设置可以访问类的私有属性 field.setAccessible(true);
获取列的数值偶 Object value=rs.getObject(i);
此处可以使用反射机制中Method实现比较麻烦所以使用Field的方法实现 field.set(o, value); } catch (Exception e) { logger.info("set the class "+cls.getName()+" property "+field.getName()+" failure :"+e.getMessage()); e.printStackTrace(); } } col.add(o); }catch(Exception ex) { logger.info("the exception occur "+ex.getMessage()); ex.printStackTrace(); } } return col; } }
相关资源:commons-dbutils.jarv1.6官方免费版