无法通过ResultSet获取所有dataColumn值

时间:2018-03-09 16:14:08

标签: java json jdbc resultset

我有一个名为testTable的表(在sql server 2014中),我有一个名为holidays的列,在我的情况下,我在这个列中有两个值,例如(2018-03-02和2018-04-02)和我使用此方法获取此值,然后将其放在json对象中,这是我的代码:

public static JSONArray convertToJSON(ResultSet resultSet) throws Exception {
    JSONArray jsonArray = new JSONArray();
    JSONObject obj = new JSONObject();
    while (resultSet.next()) {

        int total_rows = resultSet.getMetaData().getColumnCount();
        for (int i = 0; i < total_rows; i++) {


            jsonArray.put(obj.put(resultSet.getMetaData().getColumnLabel(i+1)
                    .toLowerCase(), resultSet.getObject(i+1)));

            }
    }
    System.out.println(jsonArray);
    return jsonArray;
}

但是当我运行这段代码时,我的数组中只写了两次最后的数据,它看起来像这样:

[{"startDate":2018-03-02},{"startDate":2018-03-02}]

但它看起来应该是这样的:

[{"startDate":2018-03-02},{"startDate":2018-03-03}]

我的意思是它写了两次最后的数据但是当我尝试在控制台中打印它时我得到了正确的值? 应该更改什么才能正确获取所有startDate值?

1 个答案:

答案 0 :(得分:0)

您正在通过执行以下操作覆盖记录

jsonArray.put(obj.put(resultSet.getMetaData().getColumnLabel(i+1)
                            .toLowerCase(), resultSet.getObject(i+1)));

放置对象时,您的密钥为startdate会被覆盖

obj.put(resultSet.getMetaData().getColumnLabel(i+1)
                                .toLowerCase(), resultSet.getObject(i+1))

此外,您的逻辑存在问题。以下代码将为您提供列数而不是行数

int total_rows = resultSet.getMetaData().getColumnCount();

您可以使用以下代码段来获取对象:

public static JSONArray convertToJSON(ResultSet resultSet) throws Exception {
    JSONArray jsonArray = new JSONArray();

    while (resultSet.next()) {
        JSONObject obj = new JSONObject();
        obj.put("startDate" , resultSet.getString('holidays'))
        jsonArray.put(obj);
    }
    return jsonArray;
}