servlet 第四讲 笔记 分页技术

第四讲 分页技术


为了能很好的将分页技术的内容进行重用,我将分页放在一个函数中:


page_devided(pw,req);//绘制表格函数


 

既然要分页,那么就需要先确定一些基本的数据:总共多少页,每页多少行,当前显示哪页和一共有多少行数据。

 

  • int pageSize=3;//每页多少条
  • int pageNow=1;//当前显示页数
  • int pageCount=0;//一共多少页,计算得到
  • int rowCount=0;//一共多少记录, 从数据库查


 

先从数据库中查得到总共多少条记录:

 

 

  • mySqlConnection msc=new mySqlConnection();
  • String sql="select count(*) from mydb.users";
  • ResultSet rs=msc.EQ(sql);
  • try {
  • if(rs.next()){
  • rowCount=rs.getInt(1); //得到记录的条数
  • }
  • catch (SQLException e) 
  • e.printStackTrace();
  • }

 

然后计算需要多少页来存放这些数据: 

 

  • if(rowCount%pageSize==0){//总数除以每页数是否整除,求总页数 pageCount=rowCount/pageSize;
  • }else{
  • pageCount=rowCount/pageSize+1;
  • }

接下来要查询得到对象,是当前页面应该显示的数据:

 

 

  • rs= msc.EQ("select from mydb.users "+
  • "where ID not in "+
  • "(select t.ID from (select from mydb.users limit "
  • +pageSize*(pageNow-1)+")as t) limit "+pageSize);
  • //用limit的not in 排除掉当前页面前的数据,再取limit

接下来要打印显示的表格和控制显示的超链接:

 

  1.  
  2. try {//打印表格
  3. pw.println("<table border=1>");
  4. pw.println("<tr> <th>ID</th> <th>NAME</th> <th>PASSWD</th> </tr>");//表头
  5. while(rs.next()){
  6. pw.println("<tr>");//每一个tr是为一行
  7. pw.println("<td>"+rs.getInt(1)+"</td>");//ID
  8. pw.println("<td>"+rs.getString(2)+"</td>");//用户
  9. pw.println("<td>"+rs.getString(3)+"</td>");//密码
  10. pw.println("</tr>");
  11. }
  12. pw.println("</table>");
  13. //控制页面的超链接
  14. if(pageNow>1){
  15. pw.println("<a href=wellcome?pagenow="+(pageNow-1)+">上一页</a>");
  16. }
  17. for(int i=pageNow;i<=pageNow+4;i++){//在这里控制显示的连接总数
  18. pw.println("<a href=wellcome?pagenow="+i+">"+i+"</a>");
  19. }
  20. if(pageNow<=pageCount){
  21. pw.println("<a href=wellcome?pagenow="+(pageNow+1)+">下一页</a>");
  22. }
  23. catch (SQLException e) 
  24. e.printStackTrace();
  25. }  

 

最后要在函数头上加上动态跳转的语句:也即是后面的连接触发了变量传值,改变了pageNow的值,每次触发页面都会重新加载页面,也就会重新加载函数,从而改变当前显示的表格页面:

 

  • //动态接收pageNow,来跳转表格页面
  • String spageNow=req.getParameter("pagenow");
  • System.out.println(spageNow);
  • if(spageNow!=null){
  • //用户不是第一次进入
  • pageNow=Integer.parseInt(spageNow);
  • }

servlet <wbr>第四讲 <wbr>笔记 <wbr>分页技术


下面给出完整的分页函数:


==========================================================================

 

 

  1. public void page_devided(PrintWriter pw,HttpServletRequest req){
  2. int pageSize=3;//每页多少条
  3. int pageNow=1;//当前显示页数
  4. int pageCount=0;//一共多少页,计算得到
  5. int rowCount=0;//一共多少记录, 从数据库查
  6. //动态接收pageNow,来跳转表格页面
  7. String spageNow=req.getParameter("pagenow");
  8. System.out.println(spageNow);
  9. if(spageNow!=null){
  10. //用户不是第一次进入
  11. pageNow=Integer.parseInt(spageNow);
  12. }
  13. mySqlConnection msc=new mySqlConnection();
  14. String sql="select count(*) from mydb.users";
  15. ResultSet rs=msc.EQ(sql);
  16. try {
  17. if(rs.next()){
  18. rowCount=rs.getInt(1); //得到记录的条数
  19. }
  20. } catch (SQLException e) {
  21. e.printStackTrace();
  22. }
  23.  
  24. if(rowCount%pageSize==0){//总数除以每页数是否整除,求总页数
  25. pageCount=rowCount/pageSize;
  26. }else{
  27. pageCount=rowCount/pageSize+1;
  28. }
  29. rs= msc.EQ("select * from mydb.users "+
  30. "where ID not in "+
  31. "(select t.ID from (select * from mydb.users limit "+pageSize*(pageNow-1)+")as t) limit "+pageSize);
  32. //用limit的not in 排除掉当前页面前的数据,再取limit
  33. try {//打印表格
  34. pw.println("<table border=1>");
  35. pw.println("<tr> <th>ID</th> <th>NAME</th> <th>PASSWD</th> </tr>");//表头
  36. while(rs.next()){
  37. pw.println("<tr>");//每一个tr是为一行
  38. pw.println("<td>"+rs.getInt(1)+"</td>");//ID
  39. pw.println("<td>"+rs.getString(2)+"</td>");//用户
  40. pw.println("<td>"+rs.getString(3)+"</td>");//密码
  41. pw.println("</tr>");
  42. }
  43. pw.println("</table>");
  44. //控制页面的超链接
  45. if(pageNow>1){
  46. pw.println("<a href=wellcome?pagenow="+(pageNow-1)+">上一页</a>");
  47. }
  48. for(int i=pageNow;i<=pageNow+4;i++){
  49. pw.println("<a href=wellcome?pagenow="+i+">"+i+"</a>");
  50. }
  51. if(pageNow<=pageCount){
  52. pw.println("<a href=wellcome?pagenow="+(pageNow+1)+">下一页</a>");
  53. }
  54. } catch (SQLException e) {
  55. e.printStackTrace();
  56. }
  57. }


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值