如何将DBUtil中使用BeanListHandler中转返回的List存入一个JSONArray中

         我们知道在使用EasyUI时,它只认JSON,所以封装JSON显得尤为重要。在操作数据库的时候,通常为了简化JDBC,我们通常会使用DBUtil,那么DBUtil中有个方法,例如:
List<Grade> list =  (List<Grade>) runner.query(sql.toString(),
					new BeanListHandler(Grade.class), params);

这里的runner.query()方法返回的就是List,这是如果我们想把这个List中的数据封装到JSONArray中,分别需要:表中的属性名,和属性名对应的属性值。

为了让这个封装方法具有通用性,这里引入泛型与反射,构成静态方法,充作工具类使用。

/**
	 * 
	 * @param list  外面传进来的list集合
	 * @param clazz 为了获取属性名,传进来一个class
	 * @return       返回JSONArray
	 */
	public static <T> JSONArray formatRsToJsonArray(List<T> list,Class<T> clazz ) {
		try {

			//首先创建一个JSONArray对象			
			JSONArray jsonArray = new JSONArray();
			//获取List迭代器
			Iterator it = list.iterator();
			while(it.hasNext()){
				//新建一个JSONOBject
				//先将获取到的一条记录存入JSONObject中
				JSONObject o = new JSONObject();	
				
				Field [] fs = clazz.getDeclaredFields();//获取传进来的class的所有属性	
				Object object = it.next();         //记录迭代器的下一个记录
				for (int i = 0; i < fs.length; i++) {
					fs[i].setAccessible(true);//强暴遍历到的属性,以获取私有属性
					Field f = object.getClass().getDeclaredField(fs[i].getName()); //根据强暴到的属性名再次获取属性
					f.setAccessible(true);   //强暴,获取私有属性
					String name = fs[i].getName();  //得到属性名
					Object value = f.get(object);	//得到属性名对应的属性值			 
					o.put(name, value);    //将属性名和属性值分别作为Key、value存入JSONObject中
				}
				jsonArray.add(o);  //最后将JSONObject加入JSONArray中
			}
			return jsonArray;   //返回JSONArray
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}

如果只是使用简单的JDBC,返回的结果是ResultSet,那么ResultSet有相应的rs.getMetaData();方法,这其中就有getColumnName(column)方法获得属性名,获取属性名对应的属性值也很简单,只需要rs.getObject();即可。

这里如果返回的List,就需要采用我这里的方法了,也算个封装吧。用到了点泛型、反射。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值