1.分页显示的步骤:

(1)确定每页显示的数据量

(2)计算显示的页码

(3)编写SQL语句

当数据多起来的时候 ,记得需要一个容器将它包装起来,所以大容量数据显示可以派上用场(这只是其中一种方式)

 2.大容量数据显示特点:

1)以列表方式显示数据的特点

        优势:数据能够按照指定格式显示,布局清晰

                   不受信息数量的限制

        缺点:当数据量较多,页面显示不完全时,需要用户拖动页面才能浏览更多信息

 那么大容量数据显示会降低用户体验度,有没有更好的方式呢?

这就得采用到分页实现批量数据的页面显示

分页显示在生活中随处可见

《如图所示》

 

 实现分页的步骤:

(1)获取总记录

(2)根据每页显示的记录与总记录计算总页数

《代码演示》

(count%pageSize ==0)?(count/pageSize):(count/pageSize+1);计算分页页码

public int getTotalPages(int count, int pageSize){
    	int totalpages =0; 
    	totalpages =
                      (count%pageSize ==0)?(count/pageSize):(count/pageSize+1);
    	return totalpages;
}

--分页的sql语句
--伪列:rownum 不能作用于大于符号以及between..and 把伪列-->明列(实列)=取别名 

--以emp表为例
--假设每页5条记录
--取第一页 

select * from(
       select a.*,rownum as rid from emp a where ename like '%a%'
) b where b.rid between 5 and 10

《代码演示》

提示:sql语句是先排序后编号  在需要分页的界面调用如下方法即可

public List<News> getPage(int pageIndex,int pageSize){
		List<News> ls = new ArrayList<News>();
		int a = (pageIndex-1)*pageSize+1;
		int b = pageIndex*pageSize;
		try {
			//jdbc连接数据库
			con = DBHelper.getCon();
			//定义sql 语句
			String sql = "select * from (\r\n" + 
					"select a.*,rownum as rid from(\r\n" + 
					"       select nid,ntitle,nauthor from tb_news order by nid desc\r\n" + 
					")a\r\n" + 
					")b where b.rid between ? and ?";
			//获得执行对象
			ps=con.prepareStatement(sql);
			
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2, b);
			//获得结果集
			rs = ps.executeQuery();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return ls;
	}

获取当前页码

思路:获取显示页的页码

如果获取的页码为NULL,则设置当前页为首页

如果获取的页码不为NULL,则该页码即为当前页页码

《代码演示》

String currentPage = request.getParameter("pageIndex");//读取页码
//判断页码
if(currentPage == null){
     currentPage = "1";
}    
int pageIndex = Integer.parseInt(currentPage); //将当前页码赋值给变量进行后续的出传递

《分页的设置》

根据已确认的当前页,设置上页和下页

根据总页数设置首页和末页

《如图所示》

《 首页和末页的控制》

通过判断pageIndex变量实现首页末页的控制

String currentPage = request.getParameter("pageIndex");
if(currentPage == null){
       currentPage = "1";
}    
int pageIndex = Integer.parseInt(currentPage);
//对首页与末页进行控制
if(pageIndex < 1){
       pageIndex = 1;
}else if(pageIndex > totalpages){
       pageIndex = totalpages;
}

 

《 带模糊查询的分页》

      @param pageIndex 第几页
      @param pageSize 每页多少条记录
      @param title 关键字
      @return 新闻的集合

public List<News> getPage(int pageIndex,int pageSize,String title){
		List<News> ls = new ArrayList<News>();
		int a = (pageIndex-1)*pageSize+1;
		int b = pageIndex*pageSize;
		try {
			//jdbc连接数据库
			con = DBHelper.getCon();
			//定义sql 语句
			String sql = "select * from (\r\n" + 
					"select a.*,rownum as rid from(\r\n" + 
					"       select nid,ntitle,nauthor from tb_news where ntitle like '%"+title+"%' order by nid desc\r\n" + 
					")a\r\n" + 
					")b where b.rid between 5 and 10\r\n" + 
					"";
			//获得执行对象
			ps=con.prepareStatement(sql);
			
			//给占位符赋值
			ps.setInt(1, a);
			ps.setInt(2, b);
			//获得结果集
			rs = ps.executeQuery();
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			DBHelper.myClose(con, ps, rs);
		}
		return ls;
	}

调用方法即可

《如图所示》

 提示:此处一定要加上title,不然title就会为空值,因为title返回的是查询全部

 

 

 

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐