resultSet 与 实体类 与 JSON之间的相互转化

package com.eabax.plugin.yundada.utils;
 
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
 
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
 
public class ResultSetTool {
     /**
      * 将resultSet转化为实体类(实体字段全为String类型)
      * @param rs
      * @param dto
      * @return
      * @throws Exception
      */
     public static <T> T bindDataToDTO(ResultSet rs, T dto) throws Exception { 
           
         //取得Method方法  
         Method[] methods = dto.getClass().getMethods(); 
   
         //取得ResultSet的列名  
         ResultSetMetaData rsmd = rs.getMetaData();  
         int columnsCount = rsmd.getColumnCount();  
         String[] columnNames = new String[columnsCount];  
         for ( int i = 0 ; i < columnsCount; i++) {  
             columnNames[i] = rsmd.getColumnLabel(i + 1 );  
        
   
         //遍历ResultSet  
         while (rs.next()) {  
             //反射, 从ResultSet绑定到JavaBean  
             for ( int i = 0 ; i < columnNames.length; i++) {  
                 //取得Set方法  
                 String setMethodName = "set" + columnNames[i];  
                 //遍历Method  
                 for ( int j = 0 ; j < methods.length; j++) {  
                     if (methods[j].getName().equalsIgnoreCase(setMethodName)) {  
                         setMethodName = methods[j].getName();  
                         Object value = rs.getObject(columnNames[i]); 
   
                         //实行Set方法  
                         try {  
                             //JavaBean内部属性和ResultSet中一致时候  
                             if (value != null ) {
                                 Method setMethod = dto.getClass().getMethod(  
                                         setMethodName, value.getClass());  
                                 setMethod.invoke(dto, value);  
                             }
                         } catch (Exception e) {  
                             //JavaBean内部属性和ResultSet中不一致时候,使用String来输入值。  
                             Method setMethod = dto.getClass().getMethod(  
                                     setMethodName, String. class );  
                             setMethod.invoke(dto, value.toString());  
                         }  
                     }  
                 }  
             }  
        
         return dto;  
     }
     
     /**
      * 将resultSet转化为JSON数组
      * @param rs
      * @return
      * @throws SQLException
      * @throws JSONException
      */
     public static JSONArray resultSetToJsonArry(ResultSet rs) throws SQLException,JSONException 
    
        // json数组 
        JSONArray array = new JSONArray(); 
         
        // 获取列数 
        ResultSetMetaData metaData = rs.getMetaData(); 
        int columnCount = metaData.getColumnCount(); 
         
        // 遍历ResultSet中的每条数据 
         while (rs.next()) { 
             JSONObject jsonObj = new JSONObject(); 
              
             // 遍历每一列 
             for ( int i = 1 ; i <= columnCount; i++) { 
                 String columnName =metaData.getColumnLabel(i); 
                 String value = rs.getString(columnName); 
                 jsonObj.put(columnName, value); 
             }  
             array.put(jsonObj);  
        
         
        return array; 
     }
     
     /**
      * 将resultSet转化为JSONObject
      * @param rs
      * @return
      * @throws SQLException
      * @throws JSONException
      */
     public static JSONObject resultSetToJsonObject(ResultSet rs) throws SQLException,JSONException 
    
        // json对象
         JSONObject jsonObj = new JSONObject();     
        // 获取列数 
        ResultSetMetaData metaData = rs.getMetaData(); 
        int columnCount = metaData.getColumnCount(); 
        // 遍历ResultSet中的每条数据 
         if (rs.next()) { 
             // 遍历每一列 
             for ( int i = 1 ; i <= columnCount; i++) { 
                 String columnName =metaData.getColumnLabel(i); 
                 String value = rs.getString(columnName); 
                 jsonObj.put(columnName, value); 
             }   
         }
        return jsonObj; 
     }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值