您的位置:首页 > 其它

分页查询的实现原理

2017-02-28 16:21 302 查看
1:接着上次写的图书管理系统:http://www.cnblogs.com/biehongli/p/6445803.html

这次新增了分页查询;

2:为什么会用到分页呢,因为列表内容太多了,所以使用分页进行显示。

分页的核心就是计算每页多少记录和总页数以及第几页。

3:首先先写如何计算每页多少记录和第几页,依旧在BookDao.java和BookDaoImpl.java中继续增加方法

在计算每页多少记录和第几页的后台核心代码如下所示:

  //第二步书写sql语句
String sql="select * from book limit ?,? ";
ps=con.prepareStatement(sql);//第三步:预编译
//第几页需要设置好是页数减一乘以每页的记录数即是第多少页
ps.setInt(1, (page-1)*record);
ps.setInt(2, record);

/***
* 分页查询的方法
* @param page 第几页
* @param record 一页有多少记录
* @return
*/
public List<Book> bookPage(int page,int record);


@Override
public List<Book> bookPage(int page, int record) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//第一步连接数据库
//第二步书写sql语句
String sql="select * from book limit ?,? ";
ps=con.prepareStatement(sql);//第三步:预编译
//第几页需要设置好是页数减一乘以每页的记录数即是第多少页
ps.setInt(1, (page-1)*record);
ps.setInt(2, record);

//第四步执行sql
rs=ps.executeQuery();
List<Book> list=new ArrayList<Book>();
while(rs.next()){
Book book=new Book();
book.setBookid(rs.getInt("bookid"));
book.setBookname(rs.getString("bookname"));
book.setPrice(rs.getDouble("price"));
book.setAuthor(rs.getString("author"));
book.setPic(rs.getString("pic"));
book.setPublish(rs.getString("publish"));

list.add(book);
}
return list;
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
}

return null;
}


4:首先先写如何计算总页数,依旧在BookDao.java和BookDaoImpl.java中继续增加方法

/***
* 获取总页数
* @param record
* @return
*/
public int getCount(int record);


@Override
public int getCount(int record) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
//设置初始值为-1
int n=-1;
try {
con=BaseDao.getCon();//第一步连接数据库
//第二步书写sql语句
String sql="select count(*) from book ";
ps=con.prepareStatement(sql);//第三步:预编译

//第四步执行sql
rs=ps.executeQuery();
if(rs.next()){
//获取第一条记录,因为查询count(1)就一条记录,获取即可,即总记录数
n=rs.getInt(1);
//将总记录数除以每页的总记录数然乎向上取整即可
n=(int)Math.ceil(1.0*n/record);
}

} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
}

return n;
}


5:接下来直接在book.jsp进行代码的开发,完成分页功能,本页的都是核心,因为在book.jsp页面完成了如何操作上一页,下一页,跳转页数,以及完成了首页尾页的控制

<%@page import="com.bie.dao.impl.BookDaoImpl"%>
<%@page import="com.bie.dao.BookDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page import="java.util.List" %>
<%@ page import="com.bie.po.Book" %>
<%@ page import="com.bie.service.impl.BookServiceImpl" %>

<%@ include file="head.jsp" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图书处理页面</title>
<style type="text/css">
h1{text-align:center;}
</style>

<script type="text/javascript">
function clickIt(){
var p2=document.getElementById("t2").value;
location.href="book.jsp?p="+p2;
}
</script>
</head>
<body>
<%-- <%
//第一次使用的方法
Book book=new Book();
BookServiceImpl service=new BookServiceImpl();
List<Book> list=service.select(book);
%> --%>

<%
Book book=new Book();
BookDao dao=new BookDaoImpl();
//2:获取从下面上一页下一页传来的参数p
String p2=request.getParameter("p");

//1:设置好第一页开始和一页有五条记录
int p=1;
int r=5;
//5:获取到返回的总页数,将每页的总记录数传进去
int count=dao.getCount(r);

//3:如果p2不为null且不为空,就转化为p
if(p2!=null && !p2.equals("")){
p=Integer.parseInt(p2);
}
//4:如果页数为负的那么就赋值为首页
if(p<=0){
p=1;
}

//6:控制后面的页数,如果大于总页数,将最后一页赋值为尾页即可
if(p>=count){
p=count;
}

//7:调用分页的方法进行分页操作
List<Book> list=dao.bookPage(p, r);

%>
<h1>图书列表</h1>
<a href="javascript: window.history.go(-1)">返回上一级</a>
<table align="center" cellpadding="10" cellspacing="10">

<tr bgcolor="green">
<td>编号</td>
<td>书名</td>
<td>价格</td>
<td>作者</td>
<td>封皮</td>
<td>出版社</td>
</tr>
<%-- <%
for(Book b:list){
%> --%>
<%
String bg="";
for(int i=0;i<list.size();i++){
Book b=list.get(i);
if(i%2==0)
bg="pink";
else
bg="yellow";
%>
<tr bgcolor="<%=bg%>">
<td><%=b.getBookid() %></td>
<td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td>
<td><%=b.getPrice() %></td>
<td><%=b.getAuthor() %></td>
<td><%=b.getPic() %></td>
<td><%=b.getPublish() %></td>
</tr>
<%
}
%>
</table>
<div align="center">
第<%=p %>/共<%=count %>页
<a href="book.jsp?p=0">首页</a>
<a href="book.jsp?p=<%=p-1 %>">上一页</a>
<a href="book.jsp?p=<%=p+1 %>">下一页</a>
<a href="book.jsp?p=<%=count%>">尾页</a>
<input type="text" size="2" id="t2">
<input type="button" value="go" onclick="clickIt()"/>
</div>
</body>
</html>


演示效果如下所示:



还有很多需要完善的,所以先分享一下咯,继续努力咯!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: