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返回的是查询全部