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

本文介绍了一种将数据库查询结果(ResultSet)转换为JSON格式的方法,包括JSON对象和JSON数组的转换过程。此方法适用于Java应用程序中数据的序列化处理。

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;

    }

}
实现很简单,就是把查询结果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();
- }








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值