分页:是数据展示的一种形式
为什么要分页:因为数据量太大,一页展示不完全,所有就用分页
sql语句:
select * from (select a.*,rownum myid from news a ) b where myid between ? and ?";
每页最多展示的条数/页大小:pageSize=5
当前页码:pagelndex
每页开始的条数:start=(pagelndex-1)* pageSize+1
每页结束的条数:end=pagelndex*pagelndex
| 页码 | 开始条数 | 结束条数 |
| 1 | 1=(1-1)*pageSize+1 | 5=1*5 |
| 2 | 6=(2-1)*pageSize+1 | 10 |
| 3 | 11=(3-1) *pageSize+1 | 15 |
| 4 | 16=(4-1) *pageSize+1 | 15 |
方法:
public Listquery(int pageIndex,String str) throws SQLException{ int pageSize = 5;//页大小 int start = (pageIndex-1)*pageSize+1;// 每页开始数据条数 int end = pageIndex * pageSize;// 每页结束的数据条数 listNews = new ArrayList<>(); con = DBhelper.getCon(); sql = "select * from (select a.*,rownum myid from news a where a.sid like '%"+str+"%') b where myid between ? and ?"; ps = con.prepareStatement(sql); ps.setInt(1, start); ps.setInt(2, end); rs = ps.executeQuery(); while(rs.next()) { news = new News(rs.getInt("nid"), rs.getInt("sid"), rs.getString("title"), rs.getString("author"), rs.getString("summary"), rs.getString("content"),null); listNews.add(news); } DBhelper.closeObj(con, ps, rs); return listNews; }
总数据量:rows
页大小:pageSize=5
最大页码:maxPage
maxPage=rows/pageSize;
if(rows%pageSize !=0){//有余数
pageSize++;//多加一页
}
方法:
public int getMaxPage(String str) throws Exception{
con = DBhelper.getCon();
sql = "select count(0) from news where sid like '%"+str+"%'";
ps = con.prepareStatement(sql);
rs = ps.executeQuery();
if(rs.next()) {
maxPage = rs.getInt(1) / 5;
if(rs.getInt(1) % 5 != 0) {
maxPage ++;
}
}
DBhelper.closeObj(con, ps, rs);
return maxPage;
}
Servlet:
public class LoadDataServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
// 1.设置编码
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 定义当前页码变量
int pageIndex = 1;// 默认展示第一页的数据
// 获取前台传来的页码变量
String myPageIndex = req.getParameter("pageIndex");
// 把从前台获取的页码 myPageIndex赋给当前页码 pageIndex
if(null != myPageIndex) {
pageIndex = Integer.parseInt(myPageIndex);
}
// 新闻 dao类
NewsDao nd = new NewsDao();
// 2.获取 内置对象
PrintWriter out = resp.getWriter();
HttpSession session = req.getSession();
// 获取前台传来的模糊查询关键字
String str = req.getParameter("str");
if(null == str) {
str = "";
}
// 调用分页的方法
List listNews = nd.query(pageIndex, str);
// 把获取的数据集合 listNews 保存到 request作用域里面
req.setAttribute("listNews", listNews);
// 把当前页码 pageIndex保存到
req.setAttribute("pageIndex", pageIndex);
// 把模糊查询关键字保存到 request作用域里面
req.setAttribute("str", str);
// 通过转发跳转到 admin页面 request作用域里面
req.getRequestDispatcher("/admin/admin.jsp").forward(req, resp);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/loadDataServlet.do?str=<%=str %>&pageIndex=1">首页
/loadDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex>1?pageIndex-1:1 %>">上一页
当前页数:[<%=pageIndex %>/<%=maxPage %>]
/loadDataServlet.do?str=<%=str %>&pageIndex=<%=pageIndex">下一页
/loadDataServlet.do?str=<%=str %>&pageIndex=<%=maxPage %>">末页



