javan

i like java
随笔 - 0, 文章 - 28, 评论 - 2, 引用 - 0
数据加载中……

摘在网上一段处理ResultSet转list的方法

一般做法是将ResultSet封装成一个个javabean然后将javabean放入list集合中返回。

类似于:
public   class   test   {

DB   dbx   =   new   DB();

public   static   List   resultSetToList(String   sql)   throws   SQLException   {
DB   dbx   =   new   DB();
ResultSet   rs   =   dbx.executeQuery(sql);
ResultSetMetaData   md   =   rs.getMetaData();
for   (int   i   =   0;   i   <   md.getColumnCount();   i++)   {
System.out.println(md.getColumnName(i));
System.out.println( "----------------- ");
}
List   list   =   new   ArrayList();
while   (rs.next())   {
UserBean   bean   =   new   UserBean();
int   userid   =   rs.getInt( "userid ");
String   username   =   rs.getString( "username ");
bean.setUserid(userid   +   " ");
bean.setUsername(username);
list.add(bean);
System.out.println(userid   +   "   "+username);
}
return   list;
}
}




另外一种方法
package com.service;

import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;

import com.entity.Student;

public class Service {
    
public List toList(ResultSet rs,Class cls)
    {
        
try
        {
            
            List lst
=new ArrayList();
            //用于获取列数、或者列类型
            ResultSetMetaData meta
=rs.getMetaData();
            Object obj
=null;
            
while(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);
                    //将列名第一个字母大写(为什么加+""ne ?是大写字母比小写字母多个字节?)
                    colName
=colName.replace(colName.charAt(0)+""new String(colName.charAt(0)+"").toUpperCase());
                   
//设置方法名
                    String methodName="set"+colName;
                    System.out.println(methodName);
                    //获取当前位置的值,返回Object类型
                    Object value
=rs.getObject(i);
                    //利用反射获取对象(反射概念很模糊?不太懂)
                    Method method
=obj.getClass().getMethod(methodName, value.getClass());
                    method.invoke(obj, value);                 //感觉这段类似于obj.setMethodName(value)......对于静态方法的反射可以写成method.invoke(null,value),而不能把第一个参数省略,如果方法没有参数的话,第二个参数可以为空
                }
                lst.add(obj);
            }
            
            
return lst;
        }
        
catch(Exception ex)
        {
            ex.printStackTrace();
            
return null;
        }
        
    }
}

posted on 2009-05-22 11:23 whl 阅读(2452) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航: