基于缓存的分页技术

本例采用 基于缓存的分页技术。

PS: 

CallableStatement prepareCall(String sql)  throws SQLException

使用返回的 CallableStatement 对象创建的结果集在默认情况下类型为 TYPE_FORWARD_ONLY,并带有 CONCUR_READ_ONLY 并发级别。

默认的 ResultSet 对象不可更新,仅有一个向前移动的指针。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。

 

生成可滚动和/或可更新的 ResultSet 对象。

 cs = conn.prepareCall(UP_tbl_User_GetList, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);

否则:

 rs.absolute(start);  会报错

 

 

 

SQLUserDAOImp.java 部分代码:

//获得一页
 public Iterator<User> GetOnePageUser(int start,int pagesize){
  Connection conn = null;
  CallableStatement cs = null;
  ResultSet rs = null;
  ArrayList<User> users = new ArrayList<User>();
  try {
   conn = SQLServerDAOFactory.getConnection();

    rs = cs.executeQuery();
    rs.absolute(start); 
    for(int i =0;i<pagesize;i++){
    
     User user = new User();
     user.setU_Id(rs.getInt("U_Id"));
     user.setU_UserName(rs.getString("U_UserName"));
     user.setU_Password(rs.getString("U_Password"));
     users.add(user);
     if(!rs.next()){
       break;
      }
    }
   
  } catch (SQLException e) {
   // TODO 自动生成 catch 块
   e.printStackTrace();
  }
  Iterator<User> it = users.iterator();
  return it;
 }
 


//获得总数
 public int GetCount() {
  Connection conn = null;
  CallableStatement cs = null;
  int result = 0;
  try {
   conn = SQLServerDAOFactory.getConnection();
   cs =conn.prepareCall(UP_tbl_User_GetCount);
   cs.registerOutParameter(1, Types.INTEGER);
   cs.execute();
    result = cs.getInt(1);
  } catch (SQLException e) {
   e.printStackTrace();
  }finally{
   SQLServerDAOFactory.closeStatment(cs);
   SQLServerDAOFactory.closeConnection(conn);
  }
  
  return result;
 }

 

UserAction.java 部分代码:

 public ActionForward userlist(ActionMapping mapping, ActionForm form,   HttpServletRequest request, HttpServletResponse response) {
          DAOFactory daof = DAOFactory.getDAOFactory(DAOFactory.SQL);
          UserDAO udao = daof.getUserDAO();
          ArrayList<User> userlist = new ArrayList<User>();
          Iterator<User> ulist = udao.GetAllUser();
          while(ulist.hasNext()){
               User user = ulist.next();
               userlist.add(user);
           }
          HttpSession session = request.getSession();
          session.setAttribute("userlist", userlist);
  
  
  
  
          int rowsNum = udao.GetCount();
          int totalPage=0;
          int pageSize=5;
          int pages=1;
          int temp=rowsNum%pageSize;
          if(temp==0){
               totalPage=rowsNum/pageSize;
          }else{
               totalPage=rowsNum/pageSize+1;
          }
          try{
               if(request.getParameter("page")==null||request.getParameter("page").equals("")){
                pages=1;
           }else
           {
                pages=Integer.parseInt(request.getParameter("page"));
           }
          }catch(Exception e){
               pages=1;
          }
          if(totalPage<1){
               totalPage=1;
          }
          if(pages<1) pages=1;
          if(pages>totalPage) pages=totalPage;
          int start=(pages-1)*pageSize+1;
          Iterator<User> pageuserlist =udao.GetOnePageUser(start, pageSize);
 
          session.setAttribute("pageuserlist", pageuserlist);
          session.setAttribute("pages", pages);
          session.setAttribute("totalPage", totalPage);
          session.setAttribute("rowsNum", rowsNum);
  request.setAttribute("url", "../SuperManager/UserList.jsp");
  return new ActionForward("/index.jsp");
 }

 

 

UserList.jsp 中部分代码:

<tr>
      <td><div align="right">
        <%
            int pages = (Integer)session.getAttribute("pages");
            int totalPage =(Integer)session.getAttribute("totalPage");
            int rowsNum =(Integer)session.getAttribute("rowsNum");
            if(pages!=1){
        %>
        <%
             out.println("<a href=?page=1>首页</a>   ");
             out.println("<a href=?page="+(pages-1)+">上一页</a>   ");
        }else{
             out.println("首页   ");
             out.println("上一页   ");
        }
        if(pages!=totalPage){
             out.println("<a href=?page="+(pages+1)+">下一页</a>   ");
             out.println("<a href=?page="+totalPage+">尾页</a>   ");
        }else{
             out.println("下一页   ");
             out.println("尾页   ");
        }
        out.println("共有"+rowsNum+"条记录   当前第"+pages+"/"+totalPage+"页");
        %>
      </div></td>
    </tr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值