摘在網上一段處理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;
}
}
另外一種方法
類似于:
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;
}
}
}
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;
}
}
}