Как перебрать классический постраничный запрос в программе Java JDBC в наборе результатов - PullRequest
0 голосов
/ 17 апреля 2019

Мой классический запрос разбит на страницы в файле свойств, который имеет дело примерно с 50000-100000 строк, и я решил, что на каждой странице я получу не более 5000 строк, теперь мне нужна помощь в написании фрагмента JAVBC JDBC, где Я могу использовать несколько страниц результата запроса, возвращенного запросом, и обработать его с помощью набора результатов - возможно, это цикл, который я не могу написать.

Кроме того, размер выборки - другая лучшая альтернатива этому вместо использования классической нумерации страниц? Мой запрос:

SELECT *
FROM  (
   SELECT id, col1, col2, rownum rn
   FROM (
      SELECT /*+ first_rows(5000) */ id, col1, col2
      FROM   table1
      ORDER  BY id DESC
   )
   WHERE   rownum <= 5000
)
WHERE  rn >= 1;

Даже мне нужна помощь с фрагментом java в основной версии java JDBC.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Если вы намереваетесь обработать все строки в своем коде Java, тогда нет необходимости использовать запрос разбивки на страницы. Вместо этого вы должны выполнить запрос для всех записей, которые вы хотите получить.

В вашем Java-коде обрабатывайте каждую запись по одной за раз. Не пытайтесь хранить их все в коллекции в памяти (если у вас нет оснований полагать, что они подойдут).

Драйвер Oracle JDBC не поместит все строки в саму память. Он будет получать куски строк с сервера и передавать их в ваш код при выполнении итерации в наборе результатов.

Причина, по которой вам не следует выдавать несколько разбитых на страницы запросов, заключается в том, что когда вы запрашиваете у Oracle вторую страницу, ей нужно будет выяснить, что находится на первой странице. Когда вы просите третью страницу, она должна сначала выяснить страницы 1 и 2. Таким образом, все это становится все медленнее и медленнее при работе с страницами.

0 голосов
/ 18 апреля 2019

Существуют различные способы выполнения нумерации страниц. JDBC Pagination объясняет несколько способов.

Большинство библиотек ORM предлагают разбиение на страницы.Библиотека Sormula использует PaginatedListSelector для разбивки на страницы (пример: http://www.sormula.org/pagination/). Я автор.

...