JSP(4):分页技术

来源:互联网 发布:多媒体文件播放软件 编辑:程序博客网 时间:2024/05/16 23:48

分页技术:

   分页技术是任何一个网站(网上商城,blog)都会使用到的技术,因此学习b/s开发就一定要掌握该技术。

我们先讲分面的算法:

我们需要定义四个变量,它们有各自的用处:

int pageSize:每页显示多少条记录

int pageNow:希望显示第几页

int pageCount:一共有多少页

int rowCount:一共有多少条记录

说明:pageSize是指定的pageNow是用户选择的

           rowCount是从表中查询得到的

            pageCount是计算出来的,该计算为:

          if(rowCount%pageSize==0){

             pageCount=rowCount/pageSize;

            }else{

                  pageCount=rowCount/pageSize+1;

                    }

 举例说明:

                 有用户表,共9条记录:

                rowCount=9;

                   每页显示3条记录,pageSize=3;

                那么根据我们的算法

                  pageCount=3刚好不多不少

                    如果每页显示4条记录,pageSize=4那么pageCount=3那么最后一页只有一条记录

  针对上面的问题,我们可能很自然的想到用:select字段名列表from表名where id between ?and ?

 以我们前面的user表为例显示第三页,该查询语句就是;select *from users where userId between 7and 9

这个sql语句确实是比较快,但是它有一个问题 就是如果表的id被删除了,那么某页可能就会少 一条记录。

因此最终解决方法如下:

       select top "+pageSize+"*from users where userId not in (select top "+pageSize*(pageNow-1)+" userId from users)

  //欢迎界面//登录界面package com.tsinghua;import javax.servlet.http.*;import java.io.*;import java.sql.*;public class Wel extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){this.doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res){                //业务逻辑       Connection ct=null;        PreparedStatement ps=null;        ResultSet rs=null;        try{//得到sessionHttpSession hs = req.getSession(true);String myname = (String)hs.getAttribute("pass");String u = req.getParameter("username");String p = req.getParameter("passwd");if(myname == null){res.sendRedirect("login");}else{res.setContentType("text/html;charset=gbk");//中文防止乱码PrintWriter pw = res.getWriter();//=========分页功能===============int pageSize=3;//一页显示几条记录int pageNow=1;//希望显示第几页int rowCount=0;//共有几条记录(查表)int pageCount=0;//共有几页(计算)//连接到数据库     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  //得到链接     ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb","sa","tiger");     ps = ct.prepareStatement("select count(*) from users");        rs= ps.executeQuery();    //返回一个结果集,如果增加,删除,更改的话用update    if(rs.next()){           rowCount=rs.getInt(1);    }    //计算PageCount    if(rowCount%pageSize==0){    pageCount=rowCount/pageSize;    }else{     pageCount=rowCount/pageSize+1;    }        ps=ct.prepareStatement("select top "+pageSize+"*from users where userId not in (select top "+pageSize*(pageNow-1)+" userId from users)");        //给?赋值   // ps.setInt(1,pageSize);    //ps.setInt(2,pageSize*(pageNow-1));        //执行查询    rs=ps.executeQuery();        //设置表头    pw.println("<table border=1>");    pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th></tr>");        //显示出来    while(rs.next()){    pw.println("<tr>");    pw.println("<td>"+rs.getInt(1)+"</td>");    pw.println("<td>"+rs.getString(2)+"</td>");    pw.println("<td>"+rs.getString(3)+"</td>");    pw.println("<td>"+rs.getString(4)+"</td>");    pw.println("<td>"+rs.getInt(5)+"</td>");    pw.println("</tr>");    }    pw.println("</table>");    pw.println("<img src=imgs/1.GIF ><br>");pw.println("wellcome!  "+u+" your password="+p);pw.println("你的用户名是:"+u);   //做个超链接   pw.println("<br><a href=login>返回重新登陆</a>");   }}catch(Exception ex){ex.printStackTrace();}}}


 

  //欢迎界面//登录界面package com.tsinghua;import javax.servlet.http.*;import java.io.*;import java.sql.*;public class Wel extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){this.doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res){                //业务逻辑       Connection ct=null;        PreparedStatement ps=null;        ResultSet rs=null;        try{//得到sessionHttpSession hs = req.getSession(true);String myname = (String)hs.getAttribute("pass");String u = req.getParameter("username");String p = req.getParameter("passwd");if(myname == null){res.sendRedirect("login");}else{res.setContentType("text/html;charset=gbk");//中文防止乱码PrintWriter pw = res.getWriter();//显示图片 pw.println("<img src=imgs/1.GIF ><br>"); pw.println("wellcome!  "+u+" your password="+p); pw.println("你的用户名是:"+u);//=========分页功能===============int pageSize=3;//一页显示几条记录int pageNow=1;//希望显示第几页int rowCount=0;//共有几条记录(查表)int pageCount=0;//共有几页(计算)//动态的接收pageNowString sPageNow=req.getParameter("pageNowok");if(sPageNow!=null){pageNow=Integer.parseInt(sPageNow);}//连接到数据库     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  //得到链接     ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb","sa","tiger");     ps = ct.prepareStatement("select count(*) from users");        rs= ps.executeQuery();    //返回一个结果集,如果增加,删除,更改的话用update    if(rs.next()){           rowCount=rs.getInt(1);    }    //计算PageCount    if(rowCount%pageSize==0){    pageCount=rowCount/pageSize;    }else{     pageCount=rowCount/pageSize+1;    }        ps=ct.prepareStatement("select top "+pageSize+"*from users where userId not in (select top "+pageSize*(pageNow-1)+" userId from users)");        //给?赋值   // ps.setInt(1,pageSize);    //ps.setInt(2,pageSize*(pageNow-1));        //执行查询    rs=ps.executeQuery();        //设置表头    pw.println("<table border=1>");    pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th></tr>");        //显示出来    while(rs.next()){    pw.println("<tr>");    pw.println("<td>"+rs.getInt(1)+"</td>");    pw.println("<td>"+rs.getString(2)+"</td>");    pw.println("<td>"+rs.getString(3)+"</td>");    pw.println("<td>"+rs.getString(4)+"</td>");    pw.println("<td>"+rs.getInt(5)+"</td>");    pw.println("</tr>");    }    pw.println("</table>");      //做个超链接   pw.println("<br><a href=login>返回重新登陆</a>");      //显示超链接    for(int i=1;i<=pageCount;i++){    pw.println("<a href=wel?pageNowok="+i+">"+i+"</a>");    }   }}catch(Exception ex){ex.printStackTrace();}}}


  //欢迎界面//登录界面package com.tsinghua;import javax.servlet.http.*;import java.io.*;import java.sql.*;public class Wel extends HttpServlet{public void doGet(HttpServletRequest req,HttpServletResponse res){this.doPost(req,res);}public void doPost(HttpServletRequest req,HttpServletResponse res){                //业务逻辑       Connection ct=null;        PreparedStatement ps=null;        ResultSet rs=null;        try{//得到sessionHttpSession hs = req.getSession(true);String myname = (String)hs.getAttribute("pass");String u = req.getParameter("username");String p = req.getParameter("passwd");if(myname == null){res.sendRedirect("login");}else{res.setContentType("text/html;charset=gbk");//中文防止乱码PrintWriter pw = res.getWriter();pw.println("<body><center>");//显示图片 pw.println("<img src=imgs/2.jpg ><br>"); pw.println("wellcome!  "+u+" your password="+p); pw.println("你的用户名是:"+u);//=========分页功能===============int pageSize=3;//一页显示几条记录int pageNow=1;//希望显示第几页int rowCount=0;//共有几条记录(查表)int pageCount=0;//共有几页(计算)//动态的接收pageNowString sPageNow=req.getParameter("pageNowok");if(sPageNow!=null){pageNow=Integer.parseInt(sPageNow);}//连接到数据库     Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  //得到链接     ct = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName=spdb","sa","tiger");     ps = ct.prepareStatement("select count(*) from users");        rs= ps.executeQuery();    //返回一个结果集,如果增加,删除,更改的话用update    if(rs.next()){           rowCount=rs.getInt(1);    }    //计算PageCount    if(rowCount%pageSize==0){    pageCount=rowCount/pageSize;    }else{     pageCount=rowCount/pageSize+1;    }        ps=ct.prepareStatement("select top "+pageSize+"*from users where userId not in (select top "+pageSize*(pageNow-1)+" userId from users)");        //给?赋值   // ps.setInt(1,pageSize);    //ps.setInt(2,pageSize*(pageNow-1));        //执行查询    rs=ps.executeQuery();        //设置表头    pw.println("<table border=1>");    pw.println("<tr><th>id</th><th>name</th><th>passwd</th><th>mail</th><th>grade</th></tr>");        //显示出来    while(rs.next()){    pw.println("<tr>");    pw.println("<td>"+rs.getInt(1)+"</td>");    pw.println("<td>"+rs.getString(2)+"</td>");    pw.println("<td>"+rs.getString(3)+"</td>");    pw.println("<td>"+rs.getString(4)+"</td>");    pw.println("<td>"+rs.getInt(5)+"</td>");    pw.println("</tr>");    }    pw.println("</table>");      //做个超链接   pw.println("<br><a href=login>返回重新登陆</a></br>");      //上一页   if(pageNow!=1)   pw.println("<a href=wel?pageNowok="+(pageNow-1)+">上一页</a>");   //显示超链接    for(int i=pageNow;i<=pageNow+4;i++){    pw.println("<a href=wel?pageNowok="+i+">"+i+"</a>");    }   //下一页   if(pageNow!=pageCount)   pw.println("<a href=wel?pageNowok="+(pageNow+1)+">下一页</a>");   pw.println("</center></body>");}}catch(Exception ex){ex.printStackTrace();}}}


 

0 0
原创粉丝点击