jsp+mysql实现博客文章列表翻页功能

来源:互联网 发布:三谷幸喜知乎 编辑:程序博客网 时间:2024/05/22 07:06

          首先,要实现分页,有一个知识点需要知道,就是在mysql里有个limit的用法,它可以用来选取显示几条博文和从哪个位置开始显示,具体语法如下:

select * from article limit m,n;其中m表示从表的哪个位置开始选取,n表示选取多少条数据。注意:数据库表中的位置是从0开始的。

如你想从第一条数据读到第七条数据,则语法应为:

select * from article limit 0,7;

接下来,我们需要设定或获取几个变量:每页要显示的条目数pageArticleNumber、当前页currentPage以及显示的总页数page。pageArticleNumber和currentPage可以直接设为变量:int pageArticleNumber, currentPage;而要获得page就需要先知道表的总条目数sum(直接用sql语句:select count(*) from article)可以得到。然后求page就出现以下几种情况:

if(pageArticleNumber>sum) page=1 //每页显示条目数大于了表的总条目数,无分页;

/*

*总条目是每页显示条目数的倍数,则无多余页,反之则要加1;

*/

else if(sum%pageArticleNumber=0) page=sum/ pageArticleNumber

else page=sum/ pageArticleNumber+1;

分情况求得总页数page后,咱们开始实现:

第一步,定义变量:

private int sum ;

    private int pageArticleNumber = 4;

    private int page

第二步,获取表分页数:

    /*

     * 获取Article表的分页数

     */

    public int countsofArticlePage() {

        String sql1 = "select count(*) from article";

        try {

            rs = st.executeQuery(sql1);

            if (rs.next()) {

                sum = rs.getInt(1);

                if(pageArticleNumber>sum)page=1;

                else if (sum % pageArticleNumber == 0)

                    page = sum / pageArticleNumber;

                else

                    page = sum / pageArticleNumber + 1;

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }

        returnpage;

    }

第三步:显示当前页的博文列表

由于非尾页和尾页(可能显示的条目数不是pageArticleNumber)实现起来略有不同,所以分两种情况进行实现。

/*

  * 显示尾页博文,存储在结果集里

  */

publicResultSet displayfinalArticle() {

        String sql;

        if (pageArticleNumber <sum &&sum %pageArticleNumber == 0) {

            sql = "select * from article limit " + (page - 1)

                    * pageArticleNumber +"," +pageArticleNumber;         try {

                rs = st.executeQuery(sql);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        } else {

            sql = "select * from article limit " + (page - 1)

                    * pageArticleNumber +"," +sum %pageArticleNumber;

            System.out.println("sql4=" + sql);

            try {

                rs = st.executeQuery(sql);

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        returnrs;

    }

/*

  * 显示当前页的博文,存储在结果集里

  */

    public ResultSet displayCurrentPageArticle(int currentPage) {

        String sql;

        if(currentPage>page||currentPage<1) {

            rs=null;

            System.out.println("页数越界");

        }

        else if(currentPage!=page ){

        sql = "select * from article limit " + (currentPage - 1)*pageArticleNumber +"," +pageArticleNumber;

        try {

            rs = st.executeQuery(sql);

        } catch (SQLException e) {

            e.printStackTrace();

        }

        }

        else {

            QueryJDBC myQuery = new QueryJDBC();

            myQuery.countsofArticlePage();

            rs = myQuery.displayfinalArticle();

            }

        returnrs;

    }

第四步,从结果集中取数据:(我是在jsp文件中做取数据操作的),前三步的函数都是类QueryJDBC的成员函数;

   <%

       QueryJDBC myQuery = new QueryJDBC();

       int currentPage=1,previousPage=1,postPage=1;

       String pageStr =request.getParameter("Page");

       /*

       **最开始时显示首页

       */

       if(pageStr==null) currentPage=1;

       else currentPage = Integer.parseInt(pageStr);  

       if(currentPage!=1) previousPage=currentPage-1;

       int n= myQuery.countsofArticlePage();//获取总页数

       System.out.println("n="+n);

       if(currentPage!=n) postPage=currentPage+1;

       else postPage=currentPage;

       ResultSet rs =myQuery.displayCurrentPageArticle(currentPage);

       /*

       **取数据

       */

       while(rs.next()) {

       int articleId = rs.getInt("articleId");

       String title = rs.getString("articleTitle");

       String content = rs.getString("articleContent").substring(0, 200);

       String time = rs.getString("publishTime").substring(0,16);

       QueryJDBC myQuery1 = new QueryJDBC();

           String categoryName=myQuery1.displayCategoryById(articleId);

       out.print("<br>");

       String title1 = URLEncoder.encode(title,"UTF-8");

       String url="myArticle.jsp?title="+title1;

       %>

       <div id="articleTitle">

       <ahref=<%=url%>><%=title%></a><br>

       </div>

       <divid="articleContent">

          <%=content %><br>

       </div>

       <divid="bottom">

          <%=time%>&nbsp;&nbsp;

          <%=categoryName%> |<ahref=<%=url%>>发表评论</a>

          </div>

       <%

       }

       %>

       <p align="center"><ahref="Copy ofMyblog.jsp?Page=1">首页</a>|<ahref="Copy ofMyblog.jsp?Page=<%=previousPage%>">上一页</a>|<ahref="Copy ofMyblog.jsp?Page=<%=postPage%>">下一页</a>|<a href="Copy ofMyblog.jsp?Page=<%=n%>">尾页</a></p>      

有想看看效果的,下载源代码

下载源代码

 

0 0