读书人

分页处置

发布时间: 2012-07-01 13:15:00 作者: rapoo

分页处理

分页处理一直是我想做的,心里面总觉得它很难,现在把它搞出来了,不过还是心有余悸。

一般的分页处理有2种方式,方式一是一次把所有的数据都读出来,然后使用游标进行每次移动固定的次数。

??? 方式二是使用limit关键字,在每次执行的时候传递不同的参数进行执行。

?

显然在数据量比较少的时候使用方式一和方式二没有太大的区别,但是当数据量比较大的时候,显然是用方式二比较合适。因为方式一一次读出所有的数据会占用大量的内存。

?

我使用的是第二种方式,这个地方使用到了2条sql语句,第一句是将所有的行数读出来,这个时候使用count关键字效率会比较高,第二句是分次读出数据。代码如下:

?

public HashMap<String, Integer>  findUserNumberByDatesLimit(String filePath,String offSetParam) {Connection conn=null;ResultSet rs = null;this.filePath=filePath;if (offSetParam == null) offSet = 0;else offSet = Integer.parseInt(offSetParam);String sqlString="";Map<String,Integer> resultSetMap=new HashMap<String,Integer>();try{conn=this.getDataSource().getConnection();conn.setAutoCommit(false);rs=query2ResultSet(conn,DBSql.SELECT_ALL_CREATEUSER_COUTNS);while(rs.next()){this.total=rs.getInt(1);}//this.total=totalRecode(rs);// 设置当前页数和总页数totalPages = (int)Math.ceil((double)this.total/this.maxLine); currentPages = (int)Math.floor((double)offSet/this.maxLine+1); if(total>0){sqlString = DBSql.SELECT_ALL_CREATEUSER_COUNTS_LIMIT + " LIMIT " + offSet + " , " + maxLine; rs=query2ResultSet(conn,sqlString);}while(rs.next()){resultSetMap.put(rs.getString(1), rs.getInt(2));}}catch(SQLException e){SQLUtil.rolback(conn);e.printStackTrace();}finally{SQLUtil.close(conn);}return (HashMap<String, Integer>) resultSetMap;}//**********显示翻页提示栏************* // 显示首页、下页、上页、尾页@Overridepublic String pageLegend(String startTime,String endTime) { String str = ""; int first, next, prev, last;first = 0; next = offSet + maxLine; prev = offSet - maxLine; last = (this.totalPages - 1) * maxLine; if(offSet >= maxLine){ str += " <A href=" + filePath + "?offset=" + first + "startTime="+startTime+"endTime="+endTime+" ><strong> 首页 </strong></A> "; }else{str += "<strong> 首页 </strong>";}if(prev >= 0){str += " <A href=" + filePath + "?offset=" + prev +  "&startTime="+startTime+"&endTime="+endTime+"><strong> 前页 </strong></A> "; }else{str += "<strong> 前页 </strong>";}if(next < total){str += " <A href=" + filePath + "?offset=" + next +  "&startTime="+startTime+"&endTime="+endTime+"><strong> 后页 </strong></A> "; }else{str += "<strong> 后页 </strong>";}if(totalPages != 0 && currentPages < totalPages){str += " <A href=" + filePath + "?offset=" + last + "&startTime="+startTime+"&endTime="+endTime+ "><strong> 尾页 </strong></A>"; }else{str += "<strong> 尾页 </strong>";}str += "<strong> 页次:" + getCurrentPages() + "/" + getTotalPages() + "页 ";str += maxLine + "条/页 " + "共" + total + "条</strong>";return str;}

?

我看网上很多的分页处理是使用得存储过程,这个东西也是我一直很畏惧的,以后遇到了再学吧。^-^~~

读书人网 >移动开发

热点推荐