各位看官好,今天我们来认识JSP项目如何让使界面的数据展示出分页效果
目录
一、分页
A、思路
B、Java Dao方法
Ba、分页代码
Bb、计算总行数
C、JSP界面代码
Ca、设置每页对多显示的数据
Cb、点击上一页/下一页/首页/尾页 实现分页效果
D、效果图
一、分页
A、思路
--伪列:rownum 不能作用于大于符号以及between..and 把伪列-->明列(实列)=取别名
-以emp表为例
--假设每页5条记录
--取第一页SQL语句:
select * from(
select a.*,rownum as rid from emp a where ename like '%A%'
) b where b.rid between 6 and 10
--取pageIndex页 假设pageSize=5
当pageIndex=1:1-5
当pageIndex=2:6-10
当pageIndex=3:11-15--10/5=2
--15/5=3
--13/5=2 除不尽 +1(pageIndex-1)*pageSize+1------pageIndex*pageSize
B、Java Dao方法
Ba、分页代码
/**
* 先排序后编号
* @param pageIndex 第几页
* @param pageSize 每页多少数据
* @return 新闻的集合
*/
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 {
//创建连接
con=DBHelper.getCon();
//定义sql语句
String sql="select * from(\r\n" +
" select a.*,rownum as rid from(\r\n" +
" select nid,ntitle,nauthor from news280 order by nid desc\r\n" +
" ) a\r\n" +
") b where b.rid between ? and ?";
//out.print(sql);
//获得执行对象
ps=con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1, a);
ps.setInt(2, b);
//获得结果集
rs=ps.executeQuery();
//循环遍历
while(rs.next()){
//实例化新闻对象
News n=new News();
//给对象赋值
n.setNid(rs.getInt(1));
n.setNtitle(rs.getString(2));
n.setNauthor(rs.getString(3));
//加到集合中
ls.add(n);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return ls;
}
Bb、计算总行数
/**
* 获取总行数
* @param str 表名等
* @return 行数
*/
public int getRow(String str) {
int n=0;
try {
con=DBHelper.getCon();
String sql="select count(*) from "+str;
ps=con.prepareStatement(sql);
rs=ps.executeQuery();
if(rs.next()) {
n=rs.getInt(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return n;
}
C、JSP界面代码
<%
request.setCharacterEncoding("utf-8");
//接收title option
String option=request.getParameter("option");
String title=request.getParameter("title");
if(title==null){
title="";//相当于查询全部
}
if(option==null){
option="ntitle";
}
INewsDao nd=new NewsDao();
int pageIndex=1;//当前页码 第几页
int pageSize=3;//设置每页最多显示的数据
//接收pid
String pid=request.getParameter("pid");
if(pid!=null){//说明点击了上一页或者下一页等
pageIndex=Integer.parseInt(pid);//改变pageIndex的值
}
//计算最大页码
int rows=nd.getRow("news280 where "+option+" like '%"+title+"%'");
int max=rows/pageSize;//取整
if(rows%pageSize!=0){//如果除不尽 有余数
max++;
}
if(max==0){
max=1;
}
//调用查模糊询的方法
List<News> ls= nd.getPage(pageIndex, pageSize);
//循环遍历
for(News n:ls){//n:新闻对象
//循环遍历
%>
<li><a href='/s4/news/read.jsp?nid=<%=n.getNid() %>'><%=n.getNtitle() %></a>
<span> 作者:<%=n.getNauthor()%>    
<a href='/s4/news/update.jsp?nid=<%=n.getNid()%>'>修改</a>     
<a href='/s4/news/dodelete.jsp?nid=<%=n.getNid() %>' onclick='return clickdel()'>删除</a>
</span>
</li>
<%
}
%>
<li class='space'></li>
<p align="right">
当前页数:[<%=pageIndex %>/<%=max %>]
<a href="admin.jsp?pid=1&title=<%=title%>">首页</a>
<a href="admin.jsp?pid=<%=pageIndex>1?pageIndex-1:1%>&title=<%=title%>">上一页</a>
<a href="admin.jsp?pid=<%=pageIndex<max?pageIndex+1:max%>&title=<%=title%>">下一页</a>
<a href="admin.jsp?pid=<%=max%>&title=<%=title%>">末页</a> </p>
</ul>
Ca、设置每页对多显示的数据
int pageIndex=1;//当前页码 第几页
int pageSize=3;//设置每页最多显示的数据
Cb、点击上一页/下一页/首页/尾页 实现分页效果
<p align="right">
当前页数:[<%=pageIndex %>/<%=max %>]
<a href="admin.jsp?pid=1&title=<%=title%>">首页</a>
<a href="admin.jsp?pid=<%=pageIndex>1?pageIndex-1:1%>&title=<%=title%>">上一页</a>
<a href="admin.jsp?pid=<%=pageIndex<max?pageIndex+1:max%>&title=<%=title%>">下一页</a>
界面代码里都有哦
D、效果图
OK,以上所有就是今日学习的所有内容了,我是小陽,欢迎个位看官能观看我的文章,如果有写的不好/不足的地方欢迎大家指出来,博主会做出改变,如对各位有所帮助,不介意各位留下免费的三连哦!
下期文章知识:ckeditor&smartupload
更多推荐
Java Web快速入门之 页面数据分页
发布评论