@leksoQA

Почему при считывании строк из SQL запроса в JSON записывается только первая строка?

Добрый день.
В результате SQL запроса получаю три строки с результатами. Далее с помощью JDBC и библиотеки json-simple записываю результаты в JSON. Не могу понять, почему в JSON в обьекте ITEMS записываются три обьекта ITEM с одинаковыми данными. Если попробовать без записи в json вывести в консоль, то данные у item-ов разные, как и нужно.
Код метода:
public String getTenderData() {
        JSONObject dataTender = new JSONObject();
        JSONArray dataItems = new JSONArray();
        JSONObject dataItem = new JSONObject();
        JSONObject result = new JSONObject();
        Statement statement = null;
        ResultSet resultSet = null;
        try {
            connection = this.getConnect();
            if(connection != null) {
                statement = connection.createStatement();
                resultSet = statement.executeQuery(QUERY);
                while (resultSet.next()) {
                     //Extracting data from the database and writing to JSON
                    //Tender-----------------------------------------------
                    dataTender.put("numberDocument", resultSet.getString("Ном.тендера"));
                    dataTender.put("typeProcedure", resultSet.getString("Тип процедуры"));
                    dataTender.put("status", resultSet.getString("Статус"));
                    dataTender.put("description", resultSet.getString("Описание"));
                    dataTender.put("expectedSum", resultSet.getString("Сумма"));
                    dataTender.put("yearPlan", resultSet.getString("Годовой план"));
                    dataTender.put("enquirePeriodStart", resultSet.getString("НПВопр"));
                    dataTender.put("enquirePeriodEnd", resultSet.getString("ОПВопр"));
                    dataTender.put("tenderPeriodStart", resultSet.getString("НТенд"));
                    dataTender.put("tenderPeriodEnd", resultSet.getString("ОТенд"));
                    //Items------------------------------------------------
                    dataItem.put("numberRequest", resultSet.getString("Ном.заявки"));
                    dataItem.put("cpv", resultSet.getString("CPV"));
                    dataItem.put("codeBudget", resultSet.getString("Код бюджета"));
                    dataItem.put("name", resultSet.getString("Наименование"));
                    dataItem.put("count", resultSet.getString("Количество"));
                    dataItems.add(dataItem);
                    //Result
                    result.put("dataTender", dataTender);
                    result.put("dataItems", dataItems);
               }
                closeConnect();
                if(connection == null) System.out.println("...Connection Close");
                resultSet.close();
                statement.close();
                statement = null;
                resultSet = null;
            } else System.out.println("Error: No active Connection");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result.toJSONString();


В результате получаю такой JSON:
{
  "dataTender": {
    "yearPlan": "30000.0100",
    "typeProcedure": "Допорогова закупівля",
    "enquirePeriodStart": "2017-07-14",
    "tenderPeriodEnd": "2017-06-05",
    "expectedSum": "10000.0000",
    "description": "[TEST: 26.06.2017 в 13:22] Тестовий тендер",
    "enquirePeriodEnd": "2017-06-08",
    "numberDocument": "1755",
    "tenderPeriodStart": "2017-06-08",
    "status": "Согласованный документ"
  },
  "dataItems": [
    {
      "cpv": "31210000-1",
      "name": "Запобіжник  10А керамічний",
      "count": "5.000000",
      "numberRequest": "17140",
      "codeBudget": "1.23.01.0001"
    },
    {
      "cpv": "31210000-1",
      "name": "Запобіжник  10А керамічний",
      "count": "5.000000",
      "numberRequest": "17140",
      "codeBudget": "1.23.01.0001"
    },
    {
      "cpv": "31210000-1",
      "name": "Запобіжник  10А керамічний",
      "count": "5.000000",
      "numberRequest": "17140",
      "codeBudget": "1.23.01.0001"
    }
  ]
}
  • Вопрос задан
  • 152 просмотра
Решения вопроса 1
roswell
@roswell
и швец, и жнец, и на дуде игрец
Объявление dataItem нужно перенести в тело цикла.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы