灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:4603回复:0

mysql在JSP页面中分页查看的解决

楼主#
更多 发布于:2012-09-10 19:55

最近一直在做期末的项目,所以遇见了很多问题,解决了,就会在这里写出来和大家分享。。。。

用了一个上午,自己想,和参考一些东西以后,做出了数据库分页查看的功能,觉得还算清晰吧,希望大家多多指教。。。

思路是这样的:使用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>


喜欢0 评分0
游客

返回顶部