Создать фрагменты CSV из набора результатов

Я пытаюсь перебрать набор результатов и создать куски csv по номерам строк. WriteAll, вызывающий цикл, остановлен, поэтому только первый файл заполняется данными.

Любые идеи? Спасибо.

PreparedStatement stmt = con.prepareStatement(query);
ResultSet rs = stmt.executeQuery();

int counter = 0;
int i = 0;
Path myPath = Paths.get(filname + "_" + i++ + ".csv");
CSVWriter writer = new CSVWriter(Files.newBufferedWriter(myPath, StandardCharsets.UTF_8),
        SEPARATOR_CHAR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER,
        CSVWriter.DEFAULT_LINE_END);

while (rs.next()) {
    counter++;

    while (counter == 10) {
        System.out.println(counter);
        writer.writeAll(rs, true);
        writer.flush();
        writer.close();

        myPath = Paths.get(filname + "_" + i++ + ".csv");
        writer = new CSVWriter(Files.newBufferedWriter(myPath, StandardCharsets.UTF_8),
            SEPARATOR_CHAR, CSVWriter.NO_QUOTE_CHARACTER, CSVWriter.NO_ESCAPE_CHARACTER,
            CSVWriter.DEFAULT_LINE_END);
        counter = 0;
    }
}

Ваш вопрос не совсем ясен, но похоже, что вы записываете данные ТОЛЬКО, если counter == 10. Таким образом, это будет распечатывать только каждую 10-ю строку из вашего набора записей. Насколько велик ваш рекорд? Видя, как вы сразу устанавливаете counter = 0 во внутреннем цикле while, вместо этого он может быть просто блоком если.

Jamie 20.09.2018 16:49

Также writeAll, вероятно, читает и исчерпывает весь набор результатов.

Arnaud 20.09.2018 16:56

@Arnaud, вы правы, есть идеи, как разделить набор результатов на несколько файлов csv? Спасибо.

DJK27 20.09.2018 17:20

@ Джейми, спасибо за ответ! Да, вы правы, это должно быть «если» блокировать! И он печатает не 10-ю строку, а первые 10 строк. Это именно то, что должно происходить, но он должен продолжить заполнение следующих 10 строк в другом файле, но этого не происходит. Как сказал Арно, writeAll читает весь набор результатов, но мне интересно, как это исправить. Спасибо.

DJK27 20.09.2018 17:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
172
0

Другие вопросы по теме