下面的方法是使用反射把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类中。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

java封装生成Po类方法