无法通过 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 值的主要内容,如果未能解决你的问题,请参考以下文章