分页处理

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

一般的分页处理有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;
	}
	
	//**********显示翻页提示栏************* 
	// 显示首页、下页、上页、尾页
	@Override
	public 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;
}

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值