我在sql server 2014中有一个名为testTable((的表,里面
有一个名为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}]
我的意思是它两次写入最后一个数据,但是当我尝试在控制台中打印它时,我得到了正确的值?我应该更改什么才能正确获取所有开始日期值?
通过执行以下操作来覆盖记录
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;
}