Отображение результата запроса из базы данных в приращениях

StackOverflow https://stackoverflow.com/questions/1408832

Вопрос

Я хочу отобразить список всех пользователей на моем сайте, но я хочу показывать только 10 человек в возрасте. Я не знаю, как именно это сделать. Я знаю, как это сделать, просто отображая всех пользователей на одной странице, но это не очень хорошо, не так ли?

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

Я разрабатываю на appengine с использованием Java и Spring Framework некоторые решения, о которых я думал,

<Ол>
  • Сохраните в сеансе и просмотрите список (я думаю, очень плохо)
  • передать его JSP, в частности одной из областей, страницы, запроса и т. д. Но я думаю, что запрос не будет работать.
  • Ищите контроллер Spring, который может с этим справиться.
  • Это было полезно?

    Решение

    Вообще говоря, вы должны использовать переменную формы на своей странице (через GET или POST) с именем 'page', которая будет числом. Когда вы получите это в сервлете, вы рассчитаете диапазон на основе номера страницы и настроенных строк на странице.

    Ознакомьтесь с поиском по большим наборам данных (да, это Python, но применяются те же принципы) и запросы и индексы от Google Документация по App Engine.

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

    Посмотрите на http://valuelist.sourceforge.net/

    Если вы сохраняете размер страницы на уровне 10, вы можете получить 10 пользователей для каждой возрастной группы для каждой страницы на основе номера страницы:

    SELECT TOP 10 users FROM myusers 
     WHERE AGE = function(page_number) 
     ORDER BY some_ordering
    

    Я надеюсь, что JPA + appengine поддерживает такой тип запросов.

    Некоторые движки баз данных предоставляют удобные расширения для SQL именно для этой цели. Например, в MySQL вы можете сказать что-то вроде «выбрать ... что угодно ... ограничить 50,10», где «50» строка, с которой нужно начинать, а 10 - количество строк, которые нужно получить. Затем на странице отображения вы просто помещаете кнопки «следующий» и «предыдущий», которые передают соответствующий начальный номер строки обратно на сервер для следующего запуска по запросу.

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

    В качестве простого примера, предположим, что в вашем примере вы отображаете записи по порядку с помощью " имя_пользователя " ;. Вы можете использовать Statement.setMaxRows (10), чтобы ограничить любые запросы до 10 строк. Затем при первом вызове вы выполняете, скажем, " выберите ... что угодно ... из порядка пользователя по имени_пользователя " ;. Сохраните последнее найденное имя пользователя. При следующей кнопке вы передаете это имя_пользователя обратно на сервер, и запрос для следующего вызова «выбрать ... что угодно ... от пользователя, где имя_пользователя > порядок« xxx »по имени_пользователя», где «ххх» последний user_name из предыдущего вызова. Сделайте setMaxRows снова, чтобы вы снова были ограничены 10 строками вывода. Затем вы можете позволить пользователю пройти весь вывод таким образом.

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top