2017-02-15 4 views
1

У меня есть требование для разбивки на страницы данных (элементов), полученных из базы данных. Пользовательский интерфейс также содержит параметры поиска и объем данных, заказ также зависит от критериев поиска.Разбиение данных: java + oracle sql

Предположим, что клиент отправил запрос с некоторыми критериями поиска и получил 60 результатов. Клиент видит элементы от 1 до maxPageSize (по умолчанию 25). Если запрошена 2-я страница - будет показано 26-50 элементов. Проблема в текущий момент. Я не могу получить количество максимальных результатов и не могу отобразить число maxPage.

Я вижу 2 решения этой проблемы:

  1. базы данных Запрос второй раз с теми же параметрами, но без пагинацией и получить количество пунктов.
  2. Извлечь все элементы из базы данных, фильтровать их по внутреннему коду по критериям поиска и отправлять клиенту.

Вопросов:

1) Какие из операций является менее дорогостоящим в целом?

2) Что еще можно сделать для решения такого рода задач, если есть лучшее решение?

P.S. внутренний код, написанный на Java, запросы отправляются через JDBC в Oracle 11g DB.

--- EDIT ---

Я решил эту проблему следующим образом:

WITH FINAL_RESULT AS 
    (SELECT SORTED_ITEMS.*, 
      ROWNUM RN 
    FROM (sorted basic query with searches)) 

    SELECT FINAL_RESULT.*, 
     (SELECT COUNT(*) FROM FINAL_RESULT) ITEMS_COUNT 
    FROM FINAL_RESULT 
    WHERE RN BETWEEN ? AND ? 
+0

Почему вы не можете получить общее количество результатов? Но что еще, зачем вам это нужно? Просто запросите 26 результатов, и если вы вернетесь назад 26, сделайте следующую кнопку видимой, иначе оставьте ее серым. –

+0

Дизайн на FE требует разбиения на страницы, как 1, 2, 3 ... 50 –

ответ

1

Второе решение будет довольно дорогим в случае, если есть масса объем данных в базе данных ,

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

Если счет не изменился, загрузка базы данных из-за кеширования не будет.

+0

Можете ли вы подробнее рассказать о своем заявлении «Если счет не изменился, загрузка из базы данных из-за кеширования не будет» – BobC

+0

Если необходимо необходимы изменения, ответ им открыт :) –

Смежные вопросы