无法通过 ResultSet 获取所有 dataColumn 值

Posted

技术标签:

【中文标题】无法通过 ResultSet 获取所有 dataColumn 值【英文标题】:Can't get all dataColumn values by ResultSet 【发布时间】:2018-03-09 16:14:08 【问题描述】:

我有一个名为 testTable 的表(在 sql server 2014 中),我有一个名为假期的列,在我的情况下,我在这个列中有两个值,例如(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 值?

【问题讨论】:

您正在重用您的JSONObject,而不是为每次迭代创建一个新的... 嗨 @MarkRotteveel 感谢您的评论,如果我在每次 for 循环迭代中创建 jsonObject 并将此对象添加到 Json 数组中(这将解决我的问题?) 【参考方案1】:

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

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();

可以使用如下sn-p来获取对象:

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;

【讨论】:

嗨@Yati Sawhney 谢谢你的回答,我应该如何获取rowCount resultSet.rowCount() 只获取当前的原始数字,我应该使用什么来获取原始数字? @TkhilaishviliSalome 我已经编辑了相同的内容。我假设值是字符串。如果你想修改它。

以上是关于无法通过 ResultSet 获取所有 dataColumn 值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 MySql 数据库中获取 ResultSet

通过ResultSet获取到rs的记录数的几种方法

在获取所有数据之前,Spring Batch ResultSet 已被其他人关闭

如何仅从 ResultSet 中获取第一行

按名称从 ResultSet 中获取值

如何获取ResultSet的行数和列数