package com.Android.util;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.List;
public class GetData {
public static List resultSetToList(ResultSet rs, Class<?> cls)
throws Exception {
// 取得Method
Method[] methods = cls.getMethods();// 获得bean的所有方法
List list = new ArrayList();
// 用于获取列数、或者列类型
ResultSetMetaData meta = rs.getMetaData();
Object obj = null;
while (rs.next()) {
// 获取formbean实例对象
obj = cls.newInstance(); // 用Class.forName方法实例化对象和new创建实例化对象是有很大区别的,它要求JVM首先从类加载器中查找类,然后再实例化,并且能执行类中的静态方法。而new仅仅是新建一个对象实例
// 循环获取指定行的每一列的信息
for (int i = 1; i <= meta.getColumnCount(); i++) {
// 当前列名
String colName = meta.getColumnName(i);
// 设置方法名
String setMethodName = "set" + colName;
// 遍历Method
Method setMethod = null;
for (int j = 0; j < methods.length; j++) {
if (methods[j].getName().equalsIgnoreCase(setMethodName)) { // 比较列名
setMethodName = methods[j].getName();
setMethod = methods[j];
// 获取当前位置的值,返回Object类型
Object value = rs.getObject(colName);
if (value == null) {
continue;
}
// 实行Set方法
try {
// // 利用反射获取对象
// JavaBean内部属性和ResultSet中一致时候
setMethod.invoke(obj, value);
break;
} catch (Exception e) {
// JavaBean内部属性和ResultSet中不一致时候,使用String来输入值。
e.printStackTrace();
setMethod.invoke(obj, value.toString());
}
}
}
}
list.add(obj);
}
return list;
}
public static Object resultSetToBean(ResultSet rs, Class cls)
throws Exception {
// 取得Method
Method[] methods = cls.getMethods();// 获得bean的所有方法
// 用于获取列数、或者列类型
ResultSetMetaData meta = rs.getMetaData();
Object obj = null;
if (rs.next()) {
// 获取formbean实例对象
obj = cls.newInstance(); // 用Class.forName方法实例化对象和new创建实例化对象是有很大区别的,它要求JVM首先从类加载器中查找类,然后再实例化,并且能执行类中的静态方法。而new仅仅是新建一个对象实例
// 循环获取指定行的每一列的信息
for (int i = 1; i <= meta.getColumnCount(); i++) {
// 当前列名
String colName = meta.getColumnName(i);
// 设置方法名
String setMethodName = "set" + colName;
// 遍历Method
Method setMethod = null;
for (int j = 0; j < methods.length; j++) {
if (methods[j].getName().equalsIgnoreCase(setMethodName)) { // 比较列名
setMethodName = methods[j].getName();
setMethod = methods[j];
// 获取当前位置的值,返回Object类型
Object value = rs.getObject(colName);
if (value == null) {
continue;
}
// 实行Set方法
try {
// // 利用反射获取对象
// JavaBean内部属性和ResultSet中一致时候
setMethod.invoke(obj, value);
break;
} catch (Exception e) {
// JavaBean内部属性和ResultSet中不一致时候,使用String来输入值。
e.printStackTrace();
setMethod.invoke(obj, value.toString());
}
}
}
}
}
return obj;
}
}
java反射机制解决数据库查询结果到Model类
最新推荐文章于 2024-12-16 19:31:51 发布