分页的实现步骤.doc
文本预览下载声明
为什么需要分页?
从客户角度来讲,数据内容过多,查看数据非常不便。
从服务器和网络的角度来讲,查这么多数据,传输这么多数据,是一种效率很低的做法。
分页的核心SQL:
mysql--limit
Select * from article limit 4,10;
--取第一页的数据:limit 0,10
--取第二页的数据:limit 10,10
--取第三页的数据:limit 20,10
--基本的过程:
--1.用户点击页号发送请求:channel.jsp?num=2
--2.服务器收到请求后,根据num参数的值,计算记录的起始索引:(num-1)*size
--3.调用dao中的方法,该方法发送sql:select * from tb_forum_article limit 10,10;
--4.根据dao返回的结果集内容,该内容封装到List中
--5.将list中的内容展示到页面上
2. oracle --rownum
select r,ename,sal from
(select rownum r, ename,sal from
(select * from emp order by sal desc) t2
)
where r=5 and r=10; 分页处理,查处5到10的记录
最简单最原始的分页:
分页的简单过程:
用户点击第一页传递一个参数:Num=1到后台,服务器获取num=1将该参数传到Dao中,dao中:select * from tb_article where id10 limit ?,?;, ps.setint((num-1)*10),返回一个List,传递到jsp中进行显示,发送给客户端。
在Dao中增加方法:
public static List getArticles(int cid,int startRow,int size){
String sql = select tb_forum_article.id,uname username,createTime,count,title +
from tb_forum_article +
join tb_user on tb_forum_article.userId=tb_user.id +
where tb_forum_article.cid=? and tb_forum_article.type!=2 +
limit ?,?; //小频道下所有的帖子
String sql2 = select tb_forum_article.id,uname username,createTime,count,tb_forum_article.title +
from tb_forum_article +
join tb_user on tb_forum_article.userId=tb_user.id +
join tb_forum_channel on tb_forum_article.cid=tb_forum_channel.id +
+
where tb_forum_channel.pid=? and tb_forum_article.type!=2 +
limit ?,?; //大频道下所有的帖子
return MyHib.selectRows(DBUtil.getMysqlConn(), isMainChannel(cid)?sql2:sql, new Object[]{
cid,startRow,size
}, ArticleInfo.class);
}
在JSP中调用Dao中的分页方法:
%
int cid = Integer.parseInt(request.getParameter(cid));
int num = Integer.parseInt(request.getParameter(num));
int size=10;
int startRow = (num-1)*size;
request.setAttribute(alist,ArticleService.getArticles(cid,startRow,size));
%
c:forEach var=i begin=1 end=10
显示全部