Hilo Everybody wellcome to my channel!
今天Lion带大家来学习JAVAWeb的内容分页效果(JAVAWeb07)
连更赎罪!!!
一、分页功能
分页功能的核心是就是我们的sql语句,我们要先排序后编号
sql语句:
select * from(
select a.*,rownum as rid from(
select nid,ntitle,nauthor from tb_fb order by nid desc
)
)
当我们有了sql语句之后,就可以进行下一步了,就是将sql语句写入dao方法中
代码块:
/**
* 分页第二版 先排序 后编号
* @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 tb_fb 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();
//循环遍历
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;
}
模糊查询的分页代码:
/**
* 带模糊查询的分页
* @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 {
//创建连接
con=DBHelper.getCon();
//定义sql语句
String sql="select * from (\r\n" +
" select a.*,rownum as rid from(\r\n" +
" select nid,ntitle,nauthor from news280 where ntitle like '%"+title+"%' 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();
//循环遍历
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;
}
计算最大页数所需要的dao方法代码块:
/**
* 获取总行数
* @param str 表名等
* @return 总行数
*/
public int getRows(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;
}
dao方法有了,再就是去我们需要用到的地方,去调用dao方法
代码块:
<ul class="classlist">
<%
request.setCharacterEncoding("utf-8");
//接收title
String title=request.getParameter("title");
if(title==null){
title="";//相当于查询全部
}
NewsDao nd=new NewsDao();
int pageIndex=1;//当前页面 第几页
int pageSize=5;
//接收pid
String pid=request.getParameter("pid");
if(pid!=null){//说明了点击了上一页或者下一页等
pageIndex=Integer.parseInt(pid);//改变pageIndex的值
}
//计算最大页码
int rows=nd.getRows("news280 where ntitle like '%"+title+"%'");
int max=rows/pageSize;//13/5=2
if(rows%pageSize!=0){//如果除不尽 有余数
max++;//+1
}
//调用查询的方法
List<News> ls=nd.getPage(pageIndex,pageSize,title);
//循环遍历
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?pdi=<%=max%>&title=<%=title%>">末页</a> </p>
</ul>
注:重点大家看一下那些下一页、首页a标签的写法