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-07-30 03:25:39 发布
本文介绍了一种使用Java反射机制将数据库查询结果(ResultSet)转换为Java Bean的方法。通过两个核心方法,一种可以将查询结果转换为单一的Bean实例,另一种则可以转换为Bean的集合列表。
1399

被折叠的 条评论
为什么被折叠?



