四、servlet 分页加载技术

来源:互联网 发布:项尖数据恢复注册码 编辑:程序博客网 时间:2024/06/05 14:50

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

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

0 0