Jsp+beans分页显示记录实战

我们使用一个beans来实现数据库的记录的分页显示,方法有很多种。本例是以ResultSet类的游标来实现分页的。

本例由:分页显示记录的页面Jsp

分页beans

数据库连接beans组成

本例在Tomcat下测试通过。

关键思想:

假设总记录数为m,每页显示的记录数是n,那么总页数的计算公式是:

总页数=(m%n)==0?(m/n):(m/n+1);

如果准备显示第p页的内容,应当把游标移动到第(p-1)*n+1条记录处。

源代码如下:

1、分页beans

pageNumber.java

package bean;

public class PageNumber

{

      int rowCount=1,            //总的记录数

             pageSize=1,           //每页显示的记录数

             showPage=1,         //设置预显示的页码数

             pageCount=1;        //分页之后的总页数

     

      public void setRowCount(int n){

             rowCount=n;

      }

      public int getRowCount(){

             return rowCount;

      }

      public void setPageCount(int r,int p){

             rowCount=r;

             pageSize=p;

                                         pageCount=(rowCount%pageSize)==0?(rowCount/pageSize):(rowCount/pageSize+1);

             //计算分页之后的总页数

      }

      public int getPageCount(){

             return pageCount;

      }

      public void setShowPage(int n){

             showPage=n;

      }

      public int getShowPage(){

             return showPage;

      }

      public void setPageSize(int n){

             pageSize=n;

      }

      public int getPageSize(){

             return pageSize;

      }

}

 

2、数据库连接beans

    package bean;

import java.sql.*;

import java.io.*;

public class MyConnection{

       Connection con=null;     //声明一个共享的连接对象

       Statement stat=null;      

       ResultSet rs=null;

       int rowCount=0;            //总的记录数

       public MyConnection(){

              try{

                   Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

              }catch(ClassNotFoundException e){

                   System.out.print(e);

              }

              try{

                  con=DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost:1433;

DatabaseName=student;","sa","");

              }catch(SQLException e){

                   System.out.print(e);

              }

       }

       public ResultSet myQuery(String sql) throws SQLException{

              //结果集的游标可上下移动,但当数据库变化时,结果集不变,

//不能用结果集更新数据库中的表

              stat=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,

ResultSet.CONCUR_READ_ONLY);

              //返回可滚动的结果集

              rs=stat.executeQuery(sql);

              return rs;

       }

       public void myClose() throws SQLException{

              con.close();

       }

}

3、分页显示记录的JSP页面

 

<%@page contentType="text/html;charset=gb2312"%>

<%@page import="java.sql.*"%>

<%@page import="bean.PageNumber"%>

<%@page import="bean.MyConnection"%>

<%@page import="java.io.*"%>

<jsp:useBean id="handlePage" class="bean.PageNumber" scope="session"/>

<jsp:useBean id="myCon" class="bean.MyConnection" scope="application"/>

<HTML>

<BODY bgcolor=cyan><Size=1>

<CENTER>

<BR><BR>

<%!

       // 以表格形式显示数据库记录的方法

        public void showList(ResultSet rs,JspWriter out,int n){

             try{

out.print("<BR><BR><Table border=2><tr><th>学号<th>姓名<th>数学<th>英语<th>物理</tr>");

                            for(int i=1;i<=n;i++){

                                out.print("<tr>");

                                   String number=rs.getString(1);

                                   out.print("<td>"+number+"</td>");

                                   String name=rs.getString(2);

                                   out.print("<td>"+name+"</td>");

                                   int math=rs.getInt(3);

                                   out.print("<td>"+math+"</td>");

                                   int english=rs.getInt(4);

                                   out.print("<td>"+english+"</td>");

                                   int physics=rs.getInt(5);

                                   out.print("<td>"+physics+"</td>");

                                   out.print("</tr>");

                                   rs.next();

                     }

                        out.print("</table>");

               }catch(Exception e){

                      System.out.println(e);

               }

       }

%>

<%

       ResultSet rs=null;

       int rowCount=0;     //总的记录数

       try{

               //返回可滚动的结果集

               rs=myCon.myQuery("select * from students");

              //将游标移动到最后一行

              rs.last();

              //获取记录总数

              rowCount=rs.getRow();

              //设置每页显示的记录数

              handlePage.setPageSize(2);

              //计算总页数

              handlePage.setPageCount(rowCount,handlePage.getPageSize());

              out.print("共有"+handlePage.getPageCount()+",");

              out.print("每页显示"+handlePage.getPageSize()+"条记录");

       }catch(SQLException e){

              out.print(e);

       }

%>

<%--选择显示某页的表单--%>

<%String str=response.encodeRedirectURL("showList.jsp");            //获取showList.jspurl%>

<Form action="<%=str%>" method="post">

显示首页:<Input Type="hidden" name="a" value="first">

<input type=submit value="first">

</form>

<Form action="<%=str%>" method="post">

显示下一页:<Input Type="hidden" name="a" value="next">

<input type=submit value="next">

</form>

<Form action="<%=str%>" method="post">

显示上一页:<Input Type="hidden" name="a" value="previous">

<input type=submit value="previous">

</form>

<Form action="<%=str%>" method="post">

输入要显示的页数:<Input Type="text" name="a" value="1" style="text-align:right">

<input type=submit value="submit">

</form>

<%

     String s=request.getParameter("a");

        if(s==null){

               s="1";

        }else if(s.equals("first")){

                handlePage.setShowPage(1);            //设置预显示页

                out.print("目前显示第"+handlePage.getShowPage()+"");

                //将游标移到指定的位置

                rs.absolute(1);

                //显示该页的内容

                showList(rs,out,handlePage.getPageSize());

        }else if(s.equals("next")){

                int n=handlePage.getShowPage();            //获取目前的页数

                n=(n+1);            //将页数增1

                if(n>handlePage.getPageCount()) n=1;

                handlePage.setShowPage(n);            //设置预显示页

                out.print("目前显示第"+handlePage.getShowPage()+"");

                //将游标移到指定的位置

                rs.absolute((n-1)*handlePage.getPageSize()+1);

                //显示该页的内容

                showList(rs,out,handlePage.getPageSize());

        }else if(s.equals("previous")){

               int n=handlePage.getShowPage();              //获取目前的页数

               n=n-1;          //将页数减1

               if(n<=0) n=handlePage.getPageCount();

               handlePage.setShowPage(n);             //设置预显示页

               out.print("目前显示第"+handlePage.getShowPage()+"");

               //将游标移到指定的位置

               rs.absolute((n-1)*handlePage.getPageSize()+1);

               //显示该页的内容

               showList(rs,out,handlePage.getPageSize());

        }else{

               int m=Integer.parseInt(s);           //把输入的字符转化为整型数

               handlePage.setShowPage(m);     //设置预显示页

               out.print("目前显示第"+handlePage.getShowPage()+"");

               int n=handlePage.getShowPage();

               //将游标移到指定的位置

               rs.absolute((n-1)*handlePage.getPageSize()+1);

               //显示该页的内容

               showList(rs,out,handlePage.getPageSize());

        }

%>

</CENTER>

</BODY>

</HTML>

数据库的表结构是:

create table students(

id varchar(10),name varchar(10),math int,english int,physics int)

数据库名是:student

注意:本例连接Sql数据库方式是直连,需要三个Sql的直连包。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值