将JDBC ResultSet解析为JSON格式

来源:互联网 发布:知乎 出差神器 编辑:程序博客网 时间:2024/06/15 16:07

JSON (JavaScript Object Notation) is a lightweight data-interchange format.

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

在Java中使用json,除了通过javabean等一些方法外,还可以直接操作ResultSet。

实现ResultSet接口后,可以将其转化为常见对象,如json,list,map,数组等等。这里只实现了ResultSet –> json.


1.实现ResultSetHandler接口

public interface RsHandler<T> {    /**     * Turn the <code>ResultSet</code> into an Object.     *     * @param rs 要操作的数据集     * @return 返回特定格式的resultset对象     * @throws SQLException 数据库异常     */    T handle(ResultSet rs) throws SQLException;}

2.定义一个JSONHandler处理ResultSet接口

public class JsonHandler implements RsHandler<JSONArray>{} 
实现这个接口
    @Override    public JSONArray handle(ResultSet rs)                          throws SQLException {        //创建一个JSONArray对象        JSONArray jsonArray = new JSONArray();        //获得ResultSetMeataData对象        ResultSetMetaData rsmd = rs.getMetaData();        while (rs.next()) {            //定义json对象            JSONObject obj = new JSONObject();            //判断数据类型&获取value            getType(rs, rsmd, obj);            //将对象添加到JSONArray中            jsonArray.put(obj);        }        return jsonArray;    }
根据数据类型获取数据
private void getType(ResultSet rs, ResultSetMetaData rsmd,                         JSONObject obj) throws SQLException {        int total_rows = rsmd.getColumnCount();        for (int i = 0; i < total_rows; i++) {            String columnName = rsmd.getColumnLabel(i + 1);            if (obj.has(columnName)) {                columnName += "1";            }            try {                switch (rsmd.getColumnType(i + 1)) {                    case java.sql.Types.ARRAY:                        obj.put(columnName, rs.getArray(columnName));                        break;                    case java.sql.Types.BIGINT:                        obj.put(columnName, rs.getInt(columnName));                        break;                    case java.sql.Types.BOOLEAN:                        obj.put(columnName, rs.getBoolean(columnName));                        break;                    case java.sql.Types.BLOB:                        obj.put(columnName, rs.getBlob(columnName));                        break;                    case java.sql.Types.DOUBLE:                        obj.put(columnName, rs.getDouble(columnName));                        break;                    case java.sql.Types.FLOAT:                        obj.put(columnName, rs.getFloat(columnName));                        break;                    case java.sql.Types.INTEGER:                        obj.put(columnName, rs.getInt(columnName));                        break;                    case java.sql.Types.NVARCHAR:                        obj.put(columnName, rs.getNString(columnName));                        break;                    case java.sql.Types.VARCHAR:                        obj.put(columnName, rs.getString(columnName));                        break;                    case java.sql.Types.TINYINT:                        obj.put(columnName, rs.getInt(columnName));                        break;                    case java.sql.Types.SMALLINT:                        obj.put(columnName, rs.getInt(columnName));                        break;                    case java.sql.Types.DATE:                        obj.put(columnName, rs.getDate(columnName));                        break;                    case java.sql.Types.TIMESTAMP:                        obj.put(columnName, rs.getTimestamp(columnName));                        break;                    default:                        obj.put(columnName, rs.getObject(columnName));                        break;                }            } catch (JSONException e) {                e.printStackTrace();            }        }    }

数据表:
这里写图片描述

解析结果:

[  {    "mymoney": "100",    "name": "aa",    "id": 1  },  {    "mymoney": "20",    "name": "bb",    "id": 2  },  {    "mymoney": "50",    "name": "cc",    "id": 3  }]
1 0
原创粉丝点击