В моем случае мне нужно было получить общее количество строк из ResultSet, а также получить доступ к значениям ResultSet, если общее количество строк не достигло предела файла XLS.
Для этого мне пришлось внести две коррективы в мой код:
1) Изменение конструкции объекта PreparedStatement
Объект ResultSet по умолчанию имеет курсор, который перемещается только вперед. Таким образом, вы можете перебрать его только один раз и только от первой строки до последней строки. Можно создавать объекты ResultSet, которые можно прокручивать. Следующий фрагмент кода иллюстрирует, как сделать результирующий набор с возможностью прокрутки и нечувствительным к обновлениям другими.
PreparedStatement ps = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
2) Получить общее количество строк. Следующий фрагмент кода иллюстрирует, как:
ResultSet rs = ps.executeQuery();
rs.last();
int totalRowsResult = rs.getRow();
PS: Если количество записей результата запроса слишком велико, вы можете исчерпать память на сервере Java, получив исключение: java.lang.OutOfMemoryError: пространство кучи Java. Это исключение возникнет при выполнении метода rs.last()
3) Снова получите доступ к ResultSet, и вы не получите сообщение: набор результатов исчерпан. Итак, вам нужно сбросить набор результатов наверх, используя rs.first() или rs.absolute(1). Следующий фрагмент кода иллюстрирует, как:
rs.first();
System.out.println(rs.getString(1));
person
Beatriz Wilges
schedule
05.03.2020