四、servlet 分页加载技术

一、分页算法:首先定义四个变量

int pageSize:每页显示多少条记录
int pageNow:希望显示第几页
int pageCount:一共有多少页
int rowCount:一共有多少条记录
说明:pageCount是计算出来的
(1)算法1
// 计算pageCount
if (rowCount % pageSize == 0) {
    pageCount = rowCount / pageSize;
} else {
    pageCount = rowCount / pageSize + 1;
}
(2)算法2
pageCount = (rowCount + pageSize - 1) / pageSize;

二、使用mysql数据库做分页操作

(1)增加表的记录,实现快速复制sql语句:
insert into 表名 (字段1,字段2…) select 字段1,字段2… from 表名

(2)核心代码:

// -----------分页查询功能------------
        int pageSize = 5;// 每页显示几条
        int pageNow = 1;// 当前页
        int rowCount = 0;// 共有多少条数据
        int pageCount = 0;// 共有几页数据
        String courrentPage = req.getParameter("pageNow");
        if (courrentPage != null) {
            pageNow = Integer.parseInt(courrentPage);
        }
        Connection conn = null;
        PreparedStatement stmt = null;
        ResultSet resultSet = null;
        // 加载数据库驱动
        try {
            Class.forName("com.mysql.jdbc.Driver");
            // 获取数据库连接
            String url = "jdbc:mysql://localhost:3306/student";
            String user = "root";
            String password = "tianyejun6";
            conn = DriverManager.getConnection(url, user, password);
            String sql = "select count(*) from users";
            stmt = (PreparedStatement) conn.prepareStatement(sql);
            resultSet = stmt.executeQuery();
            if (resultSet.next()) {
                rowCount = resultSet.getInt(1);
            }
            // 计算pageCount
            if (rowCount % pageSize == 0) {
                pageCount = rowCount / pageSize;
            } else {
                pageCount = rowCount / pageSize + 1;
            }
            pageCount = (rowCount + pageSize - 1) / pageSize;
            // 执行查询语句
            String sqlSearch = "select * from users where userId limit ?,?";
            stmt = (PreparedStatement) conn.prepareStatement(sqlSearch);
            // 给?赋值
            stmt.setInt(1, (pageNow - 1) * pageSize);
            stmt.setInt(2, pageSize);
            resultSet = stmt.executeQuery();
            writer.println(
                    "<table border='1'><tr><th>id</th><th>userName</th><th>password</th><th>email</th><th>grade</th></tr>");
            while (resultSet.next()) {
                writer.println("<tr>");
                writer.println("<td>" + resultSet.getInt(1) + "</td>");
                writer.println("<td>" + resultSet.getString(2) + "</td>");
                writer.println("<td>" + resultSet.getString(3) + "</td>");
                writer.println("<td>" + resultSet.getString(4) + "</td>");
                writer.println("<td>" + resultSet.getString(5) + "</td>");
                writer.println("</tr>");
            }
            writer.println("</table>");
            // 显示上一页
            if (pageNow > 1) {
                writer.print("<a href=Wel?pageNow=" + (pageNow - 1) + ">&nbsp;上一页&nbsp; </a>");
            }
            // 显示超链接
            for (int i = pageNow; i <= pageNow + pageSize - 1; i++) {
                writer.print("<a href=Wel?pageNow=" + i + ">&nbsp; " + i + "&nbsp; </a>");
            }

            // 显示下一页
            if (pageNow > 1 && (pageNow + 1) <= pageCount) {
                writer.print("<a href=Wel?pageNow=" + (pageNow + 1) + ">&nbsp;下一页&nbsp; </a>");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }

注意:
mysql分页查询语句:
select * from 表名 where 列名 limit ?,?

效果图:
这里写图片描述

(1)界面和业务逻辑未分离,源码下载地址:http://download.csdn.net/detail/tianyejun6/9726582

(2)界面和业务逻辑使用MVC设计模式分离,源码下载地址:http://download.csdn.net/detail/tianyejun6/9727045

启动tomcat服务器首次访问地址:http://localhost:8080/test/Login

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章