jdbc 将ResultSet的结果集封装到java bean中,结果只封装了第一条数据,以下是封装一条数据到一个bean中去 10

publicClasstoEntity(ResultSetrs,Classclazz){Fieldfield=null;Classt=null;//取得类里边的所有方法t... public Class toEntity(ResultSet rs,Class clazz) {

Field field = null;
Class t = null;
// 取得类里边的所有方法
try {

// 取得ResultSet列名
ResultSetMetaData rsmd = rs.getMetaData();
// 获取记录集中的列数
int counts = rsmd.getColumnCount();
// 定义counts个String 变量
String[] columnNames = new String[counts];
// 给每个变量赋值
for (int i = 0; i < counts; i++) {
columnNames[i] = rsmd.getColumnLabel(i + 1).toLowerCase();
}

// 变量ResultSet
while (rs.next()) {
t = clazz.newInstance().getClass();
// 反射, 从ResultSet绑定到JavaBean
for (int i = 0; i < counts; i++) {
// 根据 rs 列名 ,组装javaBean里边的其中一个set方法,object 就是数据库第一行第一列的数据了
Object value = rs.getObject(columnNames[i]);
if (value instanceof Clob)
{
value = rs.getString(columnNames[i]);
}
else if (value instanceof Blob)
{
value = rs.getBytes(columnNames[i]);
}
else if (value instanceof Date)
{
value = rs.getTimestamp(columnNames[i]);
}else if(value instanceof Integer){
value = rs.getInt(columnNames[i]);
}else if(value instanceof Double){
value = rs.getDouble(columnNames[i]);
}
//这里是获取数据库字段的类型
Class<?> dbType = value.getClass();

//设置参数类型,此类型应该跟javaBean 里边的类型一样,而不是取数据库里边的类型
field = clazz.getDeclaredField(columnNames[i]);
Class<?> beanType = field.getType();
//如果发生从数据库获取到得类型跟javaBean类型不同,按String类型取吧
/*
if(beanType!=dbType){
value = rs.getString(columnNames[i]);
}*/
String setMethodName = "set" + firstUpperCase(columnNames[i]);
// 第一个参数是传进去的方法名称,第二个参数是 传进去的类型;
Method m = t.getClass().getMethod(setMethodName,beanType);
// 第二个参数是传给set方法数据;如果是get方法可以不写
m.invoke(t, value);
}
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return t;
}
为什么会只封装了第一条记录呢?
展开
 我来答
duzc2
2012-12-03 · TA获得超过2512个赞
知道大有可为答主
回答量:1987
采纳率:50%
帮助的人:2072万
展开全部
t = clazz.newInstance().getClass();

这句话写的有特点。。。t 不就是 clazz么。。你绕一大圈,还是自己。而且还创建了一个对象。。

你能把你当参数clazz传进来的类的代码也贴来么。我看你逻辑很乱,根本就不像是能达到你预期效果的样子。。
更多追问追答
追问
while (rs.next())
{
list.add(toEntity(rs, clazz));
}
这是调用
追答
m.invoke(t, value);

这句话,为什么第一个参数是t?不应该是t类的一个对象么。
bd9006
2012-12-03 · TA获得超过2.5万个赞
知道大有可为答主
回答量:4.8万
采纳率:63%
帮助的人:1.6亿
展开全部
要看ResultSet是如何取的过程。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
菜鸟程序员的成长之路
2012-12-11 · 专注基础,才能成为大神
菜鸟程序员的成长之路
采纳数:150 获赞数:345

向TA提问 私信TA
展开全部
你的程序怎么这么复杂,classzz 在传进去之前,要先new一个新对象
追问
已经new了,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式