Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
27.04.2007, 17:08
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
Здравствуйте всем! Помогите, пожалуйста советом. Я еще новичок в web-программировании, поэтому сильно не пинайте. Ситуация следующая. Пишу основанное на сервлетах web-приложение в IBM Rational 6.0. Выбрана СУБД DB2. Структура базы такова - таблица-родитель и несколько таблиц-детей. На каждую таблицу создан класс, свойства которого соответствуют полям таблицы, а методы позволяют с ней работать. Операции основаны на SQL-скриптах. Например, метод readAll соединяется с базой и запускает простой скрипт "SELECT * FROM "+authId+".PERSONS", а затем результаты выборки запихивает в коллекцию. Эта коллекция и отображается в таблице одной из JSP-страниц. Остальные методы работают аналогично - соединяются, подготавливают скрипт и запускают его. Помоему, такой подход называется MVC, если не ошибаюсь. И тут встал вопрос о наболевшем. Как правильно реализовать постраничную загрузку данных (таблица-родитель может содержать немало записей), сортировку по столбцам в таблице JSP и фильтр данных? Есть некоторые соображения. Поскольку таблицы-дети не содержат большого количества записей (в моем случае), то постраничная загрузка там не нужна и сортировку данных можно выполнить используя java.util.Collections. Это же для таблицы-родителя, вероятно, нужно реализовать через соответствующие SQL-скрипты. Т.е. для сортировки использовать метод класса, который бы извлекал коллекцию записей с помощью скрипта "... ORDER BY ...", а для фильтра - с помощью скрипта "... WHERE ...". Тогда какой скрипт использовать для постраничной загрузки? В такой реализации получаем, что при каждой операции пользователя (сортировка, фильтр, и т.д.), будет обращение к базе. Вообще, в правильном ли направлении я мыслю? Помогите советом, или дайте ссылку на информацию. Заранее благодарен С уважением, Семен Попов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.04.2007, 17:36
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
Have a look at ResultSet.absolute() function and of course try to ask this question in "Java" thread. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2007, 09:20
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
Thanks. I thought, that this thread have a specialists on my problem. Простите за ужасный английский, конечно. Ну чтож, перадресую свой вопрос в форум "Java". Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2007, 13:10
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
Вроде как скроллируемый result set - (absolute) не слишком удачное решение, очень много ограничений ( http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvrsush.htm ). К тому же держать соединие. Общего ответа нет. В случае, если количество результатов гарантированно небольшое, есть смысл сразу поместить их в память и доставать по мере надобности используя pagination библиотеки. Если стоимость запроса слишком велика - то наверное скроллируемый ResultSet. Если запрос быстро выполняется, а данных много, то вытащить хитрым запросом, как вариант в соседнем форуме. Другой вариант с fetch first - допустим есть колонка col1, по которой сортируются данные. Вначале берем fetch first n rows, запоминаем верхнее и нижнее значение col1 в сессии, и при переходе на следующую страницу вызываем тот же запрос, + where col1>col1_upper_value_on_previous_page fetch first n rows ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2007, 14:14
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
Спасибо. Я тоже исключил ResultSet из моего дальнейшего решения этой задачи. А так, в основном, придерживаюсь Вашего совета - paging с помощью хитрых запросов. Можно осуществлять отбор записей по конкретной колонке с ее значением из определенного интервала(например, отбор в первую страницу записей с ID из интервала 1:100, во вторую - 101:200 и т.д.), а можно пользоваться запросом, который мне предложили в форуме Java. Так что для обсуждения этой темы предлагаю перейти в тот форум. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
28.04.2007, 14:53
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
А можно почитать документацию по DB2 и найти подобные функции в SQL. Как то UDF со Scratchpad или конструкции типа ROW NUMBER OVER BY ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.05.2007, 11:31
|
|||
|---|---|---|---|
|
|||
Сортировка, фильтрация, постраничная загрузка в web-приложении |
|||
|
#18+
В принципе можно воспользоваться классами JDBC 3.0 (например javax.sql.CachedRowSet), которые позволяют получить результаты SQL-выборки в память, а обращаться к ней через обычный ResultSet. Соответственно при первом обращении считываются данные из СУБД, а при постраничном выводе делать обращение только в CachedRowSet. Минус - доп. нагрузка на ОЗУ. PS: Эти классы встроены в JDK 1.5, для JDK-1.4.2 доступны как дополнительная библиотека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=43&mobile=1&tid=1604629]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
92ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 270ms |
| total: | 465ms |

| 0 / 0 |
