一、分页的封装方法
/**
* 带模糊查询的分页(根据标题)
* @param pageIndex 第几页
* @param pageSize 每页多少条记录
* @param title 关键字
* @return 新闻的集合
*/
public List<News> getPage(int pageIndex,int pageSize,String title,String mc){
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,nname,nzz from xw where "+mc+" like '%"+title+"%' order by nid desc\r\n" +
" ) a\r\n" +
") b where b.rid between ? and ?";
//获得执行对象
PreparedStatement ps=con.prepareStatement(sql);
//给占位符赋值
ps.setInt(1,a);
ps.setInt(2, b);
//获得结果集
ResultSet rs=ps.executeQuery();
while(rs.next()) {
//实例化新闻对象
News n=new News();
//给对象赋值
n.setNid(rs.getInt(1));
n.setNname(rs.getString(2));
n.setNzz(rs.getString(3));
//加到集合中
ls.add(n);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
DBHelper.myClose(con, ps, rs);
}
return ls;
}
二、计算总行数的方法
/**
* 获取总行数
* @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;
}
三、调用分页(最大页面)方法
NewsDao nd=new NewsDao();
int pageIndex=1;//当前页码 第几页
int pageSize=2;
//接收pid
String pid=request.getParameter("pid");
if(pid!=null){//说明点击了上一页或者下一页等
pageIndex=Integer.parseInt(pid);//改变pageIndex的值
}
//计算最大页面
int rows=nd.getRows("xw where "+mc+" like '%"+title+"%'");
int max=rows/pageSize;//13/5=2
if(rows%pageSize!=0){//如果除不尽 有余数
max++;//+1
}
//调用查询的方法
List<News> ls=nd.getPage(pageIndex,pageSize,title,mc);