Я пытаюсь перебрать набор результатов и создать куски 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;
}
}
Также writeAll, вероятно, читает и исчерпывает весь набор результатов.
@Arnaud, вы правы, есть идеи, как разделить набор результатов на несколько файлов csv? Спасибо.
@ Джейми, спасибо за ответ! Да, вы правы, это должно быть «если» блокировать! И он печатает не 10-ю строку, а первые 10 строк. Это именно то, что должно происходить, но он должен продолжить заполнение следующих 10 строк в другом файле, но этого не происходит. Как сказал Арно, writeAll читает весь набор результатов, но мне интересно, как это исправить. Спасибо.




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