Commons-dbUtils开发应用和研究(七)

 

此类和上篇的相同,不过此类使用反射机制实现相同的原理吧,^_^

  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;
 }
  
}

你可能感兴趣的:(java,apache,sql,工作,OpenSource)