分页函数算法

   最近在做毕业设计,界面要用到分页技术,于是就将自己所整理的以及思考的结果整理出来给大家分享,希望对你们有所帮助。

  首先分页要用到4个属性

  pageNow:当前页 

       pageSize:每页条数 

       pageCount:总页数 

        rowCount:总条数

        其中rowCount可以通过查询获得,而pageCount可以通过计算获得。    

 

[java]  view plain copy print ?
 
  1. <pre name="code" class="java">if(rowCount%pageSize==0){  
  2.                 pageCount=rowCount/pageSize;  
  3.             }else{  
  4.                 pageCount=rowCount/pageSize+1;</pre><br><br>  

       不过这段代码完全可以简化位一句:

 

       pageCount=(rowCount+pageSize-1)/pageSize;//计算总页数

  下面给出详细的算法和分析:

[java]  view plain copy print ?
 
  1. public ArrayList<UserBean> getUsersByPage(String sql,int pageSize,int pageNow){  
  2.         ArrayList<UserBean> al=new ArrayList<UserBean>();  
  3.         try {  
  4.               
  5.             Connection conn=this.getConn();  
  6.             System.out.println(conn);  
  7.             ps=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
  8.             rs=ps.executeQuery();  
  9.             rs.last();//光标指向查询结果集中的最后一条记录  
  10.             int rowCount=rs.getRow();//获取记录总数  
  11.             int pageCount=(rowCount+pageSize-1)/pageSize;//计算总页数  
  12.             if(pageNow>pageCount) pageNow=pageCount;  
  13.             if(pageNow<1) pageNow=1;  
  14.             if(pageCount>0){  
  15.                 /*将记录定位到待显示页的第一条记录上,absolute(int row)函数 
  16.                  * 表示将记录移动指定的row行中*/  
  17.                 rs.absolute((pageNow-1)*pageSize+1);  
  18.                 int i=0;//设置计数器  
  19.                 //i小于pageSize并且光标还没移动到最后一行记录的后面  
  20.                 while(i<pageSize&&!rs.isAfterLast()){  
  21.                     UserBean ub=new UserBean();  
  22.                     ub.setUserid(rs.getInt(1));  
  23.                     ub.setUsername(rs.getString(2));  
  24.                     ub.setTruename(rs.getString(3));  
  25.                     ub.setEmail(rs.getString(4));  
  26.                     ub.setPhone(rs.getString(5));  
  27.                     ub.setAdress(rs.getString(6));  
  28.                     ub.setPostcode(rs.getString(7));  
  29.                     ub.setGrade(rs.getInt(8));  
  30.                     rs.next();  
  31.                     i++;  
  32.                     al.add(ub);  
  33.                 }  
  34.             }  
  35.   
  36.         } catch (Exception e) {  
  37.             // TODO: handle exception  
  38.             e.printStackTrace();  
  39.         }finally{  
  40.             this.close();  
  41.         }  
  42.         return al;  
  43.     }  

  其中ps=conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)中必须用到可滚动的结果集TYPE_SCROLL_INSENSITIVE,表示rs指针可再结果集上前后滚动移动,rs.last()就表示了这个用法。

       而getConn()为数据库连接函数,close()为关闭资源函数,还有一个UserBean的get和set函数,这些应该是不难的。

       有不理解或是不足的地方欢迎提出!

 

csdn原文:http://blog.csdn.net/zjtimef/article/details/12688903

你可能感兴趣的:(分页)