欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-13 17:34:51
  最近一直在做期末的项目,所以遇见了很多问题,解决了,就会在这里写出来和大家分享。。。。   用了一个上午,自己想,和参考一些东...

 

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

 

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

 

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

摘自:技术豆子的博客