Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Пагинация, Постраничный вывод 
:(
    Опции темы
webmaster35
Дата 22.1.2010, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.7.2009

Репутация: нет
Всего: нет



Такой вопрос как в ДАО постраничный вывод сделать. Вот к примеру ДАО класс новостей в проекте Hay . Как тут сделать постраничный вывод ?

Код
      package my.sample.dao.mysql;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import my.sample.dao.NewsDao;
import my.sample.db.ConnectionManager;
import my.sample.entity.News;

public class NewsDaoImpl implements NewsDao {
    private ConnectionManager connectionManager;
    

    public NewsDaoImpl(ConnectionManager manager) {
        connectionManager = manager;
    }

    public List<News> getNewsOrderByBirthday() throws SQLException {
        String theQuery = 
            "SELECT news.id, news.headline, news.message, news.birthday " +
            "FROM news ORDER BY birthday DESC";
        Statement theStatement = connectionManager.getConnection().createStatement();

        ResultSet theResultSet = theStatement.executeQuery(theQuery.toString());

        List<News> newsList = new ArrayList<News>();
        while (theResultSet.next()) {
            News theNews = new News();
            theNews.setId(theResultSet.getInt(1));
            theNews.setHeadline(theResultSet.getString(2));
            theNews.setMessage(theResultSet.getString(3));
            theNews.setBirthday(theResultSet.getDate(4));
            newsList.add(theNews);
        }

        return newsList;
    }

    public int saveNews(News news) throws SQLException {
        String theQuery = 
            "INSERT INTO news(headline, message, birthday) " +
            "VALUES (?, ?, NOW())";
        PreparedStatement theStatement = connectionManager.getConnection().prepareStatement(theQuery);
        theStatement.setString(1, news.getHeadline());
        theStatement.setString(2, news.getMessage());

        int count = theStatement.executeUpdate();
        
        ResultSet theResultSet = theStatement.getGeneratedKeys();
        if (theResultSet.next()) {
            int newsId = theResultSet.getInt(1);
            news.setId(newsId);
        }

        return count;
    }

    public int updateNews(News news) throws SQLException {
        String theQuery = 
            "UPDATE news SET headline = ?, message = ? " +
            "WHERE news.id = ?";
        PreparedStatement theStatement = connectionManager.getConnection().prepareStatement(theQuery);
        theStatement.setString(1, news.getHeadline());
        theStatement.setString(2, news.getMessage());
        theStatement.setInt(3, news.getId());
        
        return theStatement.executeUpdate();
    }

    public News getById(Integer id) throws SQLException {
        String theQuery =
            "SELECT news.id, news.headline, news.message, news.birthday " +
            "FROM news n WHERE n.id=?";
        PreparedStatement theStatement = connectionManager.getConnection().prepareStatement(theQuery);
        theStatement.setInt(1, id);
        
        ResultSet theResultSet = theStatement.executeQuery();
        
        News theNews = null;
        if (theResultSet.next()) {
            theNews = new News();
            theNews.setId(theResultSet.getInt(1));
            theNews.setHeadline(theResultSet.getString(2));
            theNews.setMessage(theResultSet.getString(3));
            theNews.setBirthday(theResultSet.getDate(4));
        }
        return theNews;
    }

    public int deleteNews(Integer id) throws SQLException {
        String theQuery = "DELETE FROM news WHERE news.id = ?";
        PreparedStatement theStatement = connectionManager.getConnection().prepareStatement(theQuery);
        theStatement.setInt(1, id);

        return theStatement.executeUpdate();
    }

}
 

PM MAIL   Вверх
Nofate
Дата 22.1.2010, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 2
Всего: 8



Если БД поддерживает - использовать в запросах LIMIT.
Или переписать под hibernate и использовать setFirstResult() и setMaxResults(). smile


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
webmaster35
Дата 23.1.2010, 07:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 13.7.2009

Репутация: нет
Всего: нет



Цитата(Nofate @ 22.1.2010,  22:55)
Если БД поддерживает - использовать в запросах LIMIT.
Или переписать под hibernate и использовать setFirstResult() и setMaxResults(). smile

Повторюсь я совсем новичок ... Ну сделать лимит не проблема, лимит 20 например. И что дальше ?
PM MAIL   Вверх
Nofate
Дата 23.1.2010, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 266
Регистрация: 13.10.2008

Репутация: 2
Всего: 8



Делаем метод, который возвращает новости по номеру страницу. Если используете MySQL выглядеть это будет так:

Код


public List<News> getNewsPagination(int page, int maxNews) throws SQLException {

   String theQuery = "SELECT news.id, news.headline, news.message, news.birthday " +
                                "FROM news ORDER BY birthday DESC LIMIT ?, ?";

   PreparedStatement theStatement = connectionManager.getConnection().prepareStatement(theQuery);
        theStatement.setInt(1, maxNews*(page - 1));
        theStatement.setInt(2, maxNews);

   //все остальное
   
   ......
   ......
}


, где page >= 1 и maxNews >= 1.

Кроме того, нужен метод, возвращающий кол-во страниц при заданном кол-ве новостей на странице, для генерёжки ссылок на страницы в JSP (например: "страницы: 1 2 3 4 ... 167"  или "Goooooooogle" smile).


--------------------
The future is not set, there is no fate but what we make for ourselves.
Нофейтово пространство и смежные области 
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.