四、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

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