初级_获取MySQL数据分页查询显示在前端

来源:互联网 发布:linux启动5938端口 编辑:程序博客网 时间:2024/05/16 04:31

分页查询

分页查询的功能分析:

物理分页:不是一次性将所有数据全部查询出来.查询第一页:发送一条查询几条的SQL语句.查询下一页数据:又发送一条查询后几条的SQL

主要依赖 select * from 数据库名 where 条件 limit a,b;(从a开始每次查询b条记录)

前台向后台传递数据:

前台要显示: 总页数,当前页,总记录数.每页显示多少条记录 首页 上一页下一页 末页 指定跳页

第一次访问前台要向后台传递一个当前页数和每页显示多少条记录

后台向前台传递数据:

总页数,当前页,总记录数.每页显示多少条记录.以及查询到的记录所在的List集合 .指定跳到那

因为要传递的内容多,所以将这些内容封装在一个新建的对应的javabean对象中传递


部分代码体现:

javaDao部分:

public int findCount() throws SQLException{ //获取到数据库的总记录数
QueryRunner qr=new QueryRunner(JDBCUtils3.getDataSource());
Object query = qr.query("select count(*) from customer",new ScalarHandler());
Long count=(Long) query;
return count.intValue();
}

public List<Customer> findByPage(int a,int b) throws SQLException{//将查询到记录封装到List<Customer>集合中
QueryRunner qr=new QueryRunner(JDBCUtils3.getDataSource());
List<Customer> list = qr.query("select * from customer limit ?,? ", new BeanListHandler<Customer>(Customer.class),a,b);
return list;
}

servlet部分:

response.setContentType("text/html;charset=utf-8");
int a = 0;
int b = 0;
//
指定跳转页面的代码将放在try catch中      try里面的代码就是为了处理用户指定跳页的功能的
// 如果正常访问,没有shippage传过来.就执行catch中的内容.如果传过来了shippage.就执行try里面的
try {
int c = Integer.parseInt(request.getParameter("ccc"));
System.out.println(c);
int s = Integer.parseInt(request.getParameter("shippage"));// 获得表单中用户输入的要跳转页面
System.out.println(s);
if (s <= 0) { // 如果输入页面<=0.那么调到第一页
b = Integer.parseInt(request.getParameter("bbb"));
a = 0;
} else if (s > 0 && s <= c) { // 正常跳转
b = Integer.parseInt(request.getParameter("bbb"));// 获得表单传过来的当前一个页面显示的信息数
a = b * s - b; // a就是指定跳转页面在数据库中开始截取的位置,b是一次截取显示几条信息
} else if (s > c) { // 如果输入页面大于总页面,跳到最大页面
b = Integer.parseInt(request.getParameter("bbb"));
a = b * c - b;
}
} catch (Exception e) {
// 如果正常访问,会获取Main.jsp中传过来的a和b
a = Integer.parseInt(request.getParameter("aaa"));
b = Integer.parseInt(request.getParameter("bbb"));
}

List<Customer> findByPage = null;
try {
findByPage = CustomerService.findByPage(a, b);// 获得数据库中从位置a开始长度为b截取的集合.
} catch (SQLException e) {
e.printStackTrace();
}
int count = 0;
try {
count = CustomerService.findCount();// 获得数据库中总的数据个数
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PageBean pb = new PageBean();// 数据量有点多,所以把当前页,总页数,页面显示条数,总数据数和存对象的集合封装在一个新的
pb.setShowPage(b);
pb.setCount(count);
pb.setNowPage(a / b + 1);//nowPage就是当前页
pb.setPagelist(findByPage);
int countPage = 0;
if (count % b == 0) { // 判断总页数的个数,有两种可能
countPage = count / b;
} else {
countPage = count / b + 1;
}
pb.setCountPage(countPage);
request.setAttribute("pagebean", pb);      //将pagebean储存在request域中
request.getRequestDispatcher("/FindByPage.jsp").forward(request,
res
ponse);

jsp部分:

<form action="findbypage?bbb=${requestScope.pagebean.showPage}" method="post"> 

<table align="center" border="2" width="100%">
<tr>
<td colspan="9"></td>
<td><a href="Main.jsp">回到首页</a>
</td>
</tr>
<tr>
<td>编号</td>
<td>用户姓名</td>
<td>用户性别</td>
<td>用户生日</td>
<td>用户电话</td>
<td>用户邮箱</td>
<td>用户兴趣</td>
<td>用户类别</td>
<td>用户描述</td>
<td>用户操作</td>
</tr>

<c:forEach items="${pagebean.pagelist }" var="c" //遍历存储记录的集合生成表单
varStatus="status">
<tr>
<td>${status.count}</td> //计数功能
<td>${c.name}</td>
<td>${c.gender}</td>
<td>${c.birthday}</td>
<td>${c.callphone}</td>
<td>${c.email}</td>
<td>${c.hobby}</td>
<td>${c.type}</td>
<td>${c.description}</td>
<td><a href="updateservlet?customer=${c.id}">修改 &nbsp;</a><a
href="delectservlet?id=${c.id}">删除</a>
</td>
</tr>
</c:forEach>
<tr>
<td colspan="10" align="right"><c:iftest="${pagebean.nowPage>1}">       //当前页面大于1才显示首页和上一页.等于1的时候隐藏
<a href="findbypage?aaa=0&bbb=${pagebean.showPage}">首页</a>&nbsp;        //点击首页的话传递 a=0 b=当前页面显示的记录个数给servlet
<a href="findbypage?aaa=${pagebean.showPage*pagebean.nowPage-2*pagebean.showPage}&bbb=${pagebean.showPage}">上一页</a>&nbsp;  
</c:if> 第${pagebean.nowPage}/${pagebean.countPage}页&nbsp;     //显示总页面和当前页面

  <c:if test="${pagebean.nowPage<pagebean.countPage}">      //判断当前页面和总页面的关系.适当隐藏尾页和下一页
<a href="findbypage?aaa=${pagebean.showPage*pagebean.nowPage}&bbb=${pagebean.showPage}">下一页</a>
<a href="findbypage?aaa=${pagebean.showPage*pagebean.countPage-pagebean.showPage}&bbb=${pagebean.showPage}">尾页</a>&nbsp;
</c:if> 当前每页显示${pagebean.showPage}条记录,你还可以<a href="findbypage?aaa=0&bbb=5">以5条每页显示</a>&nbsp;或者&nbsp;

<a href="findbypage?aaa=0&bbb=10">以10条每页显示</a>&nbsp;              //设置两个可选的页面显示记录数

 <input type="text" name="shippage"><input type="hidden" name="ccc"       //实现跳转指定页面功能
value="${pagebean.countPage}"><input type="submit"
value="跳转">&nbsp;</td>//不知道为什么当时 ccc在action地址栏那个地方传递不到servlet,所以在这里设置一个隐藏框用于传递
</tr>
</table>
</form>

   

感觉写的很low,毕竟我是新手,嘿嘿 .当笔记了.谢谢看的到的人

//sHaqIMa










1 0
原创粉丝点击