mysql在JSP页面中分页查看的解决
5582 点击·0 回帖
![]() | ![]() | |
![]() | 最近一直在做期末的项目,所以遇见了很多问题,解决了,就会在这里写出来和大家分享。。。。 用了一个上午,自己想,和参考一些东西以后,做出了数据库分页查看的功能,觉得还算清晰吧,希望大家多多指教。。。 思路是这样的:使用javabean来操作分页的控制数据,然后在jsp里实现,在页面最后的下一页之类的连接,增加了参数值的判断,完美的解决了一些问题。 详细的看源码吧。。。 View.java public class View { private int currentPage;// 记录当前的页数 private int pageSize;// 每页显示的记录数 private int recordCount;// 一共有多少条记录 public View(int pageSize, int recordCount, int currentPage) { this.pageSize = pageSize; this.recordCount = recordCount; this.setCurrentPage(currentPage); } // 计算总的页数 public int getPageCount() { int size = recordCount / pageSize;// 总页数=总条数/每页要现实的记录 int flag = recordCount % pageSize;// 取模运算,为了计算最后一页要显示的条数 if (flag != 0) { size++; } // 根据记录数判断返回的总页数 if (recordCount == 0) {// 如果有0条记录 // 返回只有1页 return 1; } // 返回计算出来的页数 return size; } // 设置sql语句中,limit的索引起始位置,从0开始 public int getFromIndex() { return (currentPage - 1) * pageSize;// 重点算法:(当前页码-1)*每页记录数=索引的起始位置 } // 设置当前页 public void setCurrentPage(int currentPage) { // 为什么要设置? /* * 因为:在jsp页面中,会放置首页和上一页,下一页和末页两个按钮 * 当在最后一页点击下一页时,此时获得页面数会大于实际的页面,所以页面就要保持在最后一页 * 当在第一页点击上一页,此时获得的页面数会小于或=0,此时就要一直保持在第一页 */ int vaildPage = currentPage <= 0 ? 1 : currentPage; vaildPage = vaildPage > this.getPageCount() ? this.getPageCount() : vaildPage; this.currentPage = vaildPage; } // 得到当前页,用于显示在JSP中 public int getCurrentPage() { return currentPage; } // 得到每页显示的记录数 public int getPageSize() { return pageSize; } } index.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@page import="java.sql.Connection"%> <%@page import="java.sql.DriverManager"%> <%@page import="java.sql.PreparedStatement"%> <%@page import="java.sql.ResultSet"%> <%@page import="com.view.View"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>分页查看数据库</title> </head> <body> <%!//数据库连接信息 public static final String URL = "jdbc:mysql://localhost:3306/j2ee"; public static final String USERNAME = "root"; public static final String PASSword = "root";%> <% //连接数据库,获取有多少条记录 Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(URL, USERNAME, PASSword); String sqlCount = "select count(*) from employee";//得到一共有多少条记录 PreparedStatement ps = conn.prepareStatement(sqlCount); ResultSet rs = ps.executeQuery(); int recordCount = 0;//一共有多少记录 if (rs.next()) { recordCount = rs.getInt(1); } %> <% //获取分页对象,传参 String pageStr = request.getParameter("page"); int currentPage = 1; if (pageStr != null) { currentPage = Integer.parseInt(pageStr); } View view = new View(5, recordCount, currentPage); //获取参数 int fromIndex = view.getFromIndex();//起始位置 int pageSize = view.getPageSize();//每页显示的记录数 %> <table border="1"> <% //执行sql String sql = "select fname,lname from employee limit ?,?"; ps = conn.prepareStatement(sql); ps.setInt(1, fromIndex); ps.setInt(2, pageSize); rs = ps.executeQuery(); while (rs.next()) { String fname = rs.getString(1); String lname = rs.getString(2); %> <tr> <td><%=fname%></td> <td><%=lname%></td> </tr> <% } %> </table> <% //关闭连接 if (ps != null) { ps.close(); } if (rs != null) { rs.close(); } if (conn != null) { conn.close(); } %> 当前第<%=view.getCurrentPage()%>页,一共<%=view.getPageCount()%>页<br/> <a href="index.jsp?page=1">首页</a> <% if ((view.getCurrentPage() - 1) <= 0) { %> <a href="index.jsp?page=1">上一页</a> <% } else { %> <a href="index.jsp?page=<%=(view.getCurrentPage() - 1)%>">上一页</a> <% } %> <% if ((view.getCurrentPage() + 1) > view.getPageCount()) { %> <% } else { %> <a href="index.jsp?page=<%=(view.getCurrentPage() + 1)%>">下一页</a> <% } %> <a href="index.jsp?page=<%=view.getPageCount()%>">末页</a> <br> </body> </html> | |
![]() | ![]() |