首页 > 学院 > 开发设计 > 正文

java反射机制解决数据库查询结果到Model类

2019-11-14 11:08:34
字体:
来源:转载
供稿:网友
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; }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表