此类和上篇的相同,不过此类使用反射机制实现相同的原理吧,^_^
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;
}
}