下面的方法是使用反射把ResultSet对象得到的单条结果放入到java对象中,返回Object对象

public static Object singleResultset(ResultSet rs,String str){
    	try {
    		//加载类
    		Class clazz = Class.forName(str);
    		//创建此 Class对象所表示的类的一个新实例。
    		Object obj = clazz.newInstance();
    		//获取此 ResultSet对象的列的编号、类型和属性。
    		ResultSetMetaData rsmd = rs.getMetaData();
    		//ResultSetMetaData.getColumnCount()方法获取此 ResultSet对象中的列数。
    		int count = rsmd.getColumnCount();
    		
		//遍历该ResultSet对象的行数据
		while(rs.next()){
			//遍历ResultSet对象的列数据
			for(int i=1;i<count+1;i++){
				//ResultSetMetaData.getColumnName()方法获取指定列的名称。
				String columnName = rsmd.getColumnName(i);
				//将指定列的列名首字母转换成大写
				columnName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
				//根据指定列的名称获取指定的get方法
				Method methodGet = clazz.getMethod("get"+columnName, null);
				//Method.getGenericReturnType()获取该方法的返回类型。(获取该实例的get方法的返回类型)
				Class type = (Class)methodGet.getGenericReturnType();
				//根据指定列的名称获取指定的set方法
				Method methodSet = clazz.getMethod("set"+columnName, type);
				//判断并转换该实例中的set方法中参数的类型
				if(type.isAssignableFrom(int.class) || type.isAssignableFrom(Integer.class)){
					//将传给该实例的set方法的参数值转换成int类型,然后执行该实例的set方法将数据放入Po类的字段中
					methodSet.invoke(obj, Integer.parseInt(rs.getString(columnName)));
				}
				if(type.isAssignableFrom(String.class)){
					methodSet.invoke(obj, rs.getString(columnName));
				}
				if(type.isAssignableFrom(double.class) || type.isAssignableFrom(Double.class)){
					methodSet.invoke(obj, Double.parseDouble(rs.getString(columnName)));
				}
				if(type.isAssignableFrom(boolean.class) || type.isAssignableFrom(Boolean.class)){
					methodSet.invoke(obj, Boolean.parseBoolean(rs.getString(columnName)));
				}
			}
		}
		//返回该Class对象的实例
		return obj;

	} catch (ClassNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (NoSuchMethodException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (SecurityException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IllegalAccessException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (IllegalArgumentException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InvocationTargetException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} catch (InstantiationException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	return null;
}

调用该方法

AssetPo ap = (AssetPo)singleResultset(rs,"com.wlx.po.AssetPo");//参数一是查询到的ResultSet对象,参数二是反射得到的结果集放入的java对象(应返回的是一个Object对象所以需要强转一下)

下面的方法是使用反射把ResultSet对象得到的多条结果放入到List 集合中,和上面的方法没有什么区别,唯一不同的是下面的结果集放入的是一个集合,返回List 集合

public static List listResultset(ResultSet rs,String str){
		List list = new ArrayList();
		try {
			//加载类
			Class clazz = Class.forName(str);
			//获取此 ResultSet 对象的列的编号、类型和属性。
			ResultSetMetaData rsmd = rs.getMetaData();
			//返回此 ResultSet 对象中的列数。
			int count = rsmd.getColumnCount();
			
			while(rs.next()){
				//创建此 Class对象所表示的类的一个新实例。
				Object obj = clazz.newInstance();
				for(int i=1;i<count+1;i++){
					//获取指定列的名称。
					String columnName = rsmd.getColumnName(i);
					//将指定列的列名首字母转换成大写
					columnName = columnName.substring(0, 1).toUpperCase() + columnName.substring(1);
					//获取该实例中的get方法
					Method methodGet = clazz.getMethod("get"+columnName, null);
					//获取该实例中get方法的返回类型
					Class type = methodGet.getReturnType();
					//获取该实例中的set方法
					Method methodSet = clazz.getMethod("set"+columnName, type);
					//判断并转换该实例中的set方法中参数的类型
					if(type.isAssignableFrom(int.class) || type.isAssignableFrom(Integer.class)){
						//将传给该实例的set方法的参数值转换成int类型,然后执行该实例的set方法将数据放入Po类的字段中
						methodSet.invoke(obj, Integer.parseInt(rs.getString(columnName)));
					}
					if(type.isAssignableFrom(String.class)){
						methodSet.invoke(obj, rs.getString(columnName));
					}
					if(type.isAssignableFrom(double.class) || type.isAssignableFrom(Double.class)){
						methodSet.invoke(obj, Double.parseDouble(rs.getString(columnName)));
					}
					if(type.isAssignableFrom(boolean.class) || type.isAssignableFrom(Boolean.class)){
						methodSet.invoke(obj, Boolean.parseBoolean(rs.getString(columnName)));
					}
				}
				list.add(obj);
			}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NumberFormatException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

调用该方法

List list = listResultset(rs, "com.wlx.po.AssetPo");//参数一是查询到的ResultSet对象,参数二是反射得到的结果集放入的java对象

上面的两个方法是使用java的反射机制来获得Po类中get方法的返回类型,来设置set的参数类型,并把查询得到的ResultSet对象中的结果通过执行set方法设入Po类中。