您的位置:首页 > Web前端 > JavaScript

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

2016-12-30 15:09 357 查看
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());

                        }

                    }

                }

            }

  
ae35
      }

        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;

    }

}
实现很简单,就是把查询结果ResultSet的每一条数据转换成一个json对象,数据中的每一列的列名和值组成键值对,放在对象中,最后把对象组织成一个json数组。

public String resultSetToJson(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.toString();
- }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: