首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

JSP 連線 MySQL 實現分頁顯示實戰代碼

     編輯:MySQL 資料庫相關知識

分頁邏輯說明

  • count:總記錄數
  • page:用戶請求頁碼(可為負數表示大頁跳轉)
  • 每頁 15 筆,每 10 頁為一大頁

核心 JSP 代碼片段

<%
    int i = count / 15;           // 總頁數
    int j = i / 10;               // 總大頁數
    int StartPage;

    if (Page < 0) Page = 0 - Page * 10;  // 負數轉大頁跳轉
    StartPage = Page / 10;

    out.print("[共有" + i + "頁]");

    if (StartPage > 0) out.print("|前10頁");

    for (int k = 0; k < 10; k++) {
        int p = StartPage * 10 + k;
        if (p > i) break;
        if (p == Page)
            out.print("|第" + (p+1) + "頁");  // 當前頁高亮
        else
            out.print("|第" + (p+1) + "頁");
    }

    if (StartPage < j) out.print("|後10頁");
    out.print("|");
%>

完整應用架構建議

1. 資料查詢層(DAO)

public List findByPage(int offset, int pageSize) {
    String sql = "SELECT * FROM table LIMIT ?, ?";
    // 使用 PreparedStatement 防注入
    return jdbcTemplate.query(sql, new Object[]{offset, pageSize}, rowMapper);
}

public int getTotalCount() {
    return jdbcTemplate.queryForObject("SELECT COUNT(*) FROM table", Integer.class);
}

2. 控制層

int page = Integer.parseInt(request.getParameter("page"));
int pageSize = 15;
int offset = (page - 1) * pageSize;
List list = dao.findByPage(offset, pageSize);
int total = dao.getTotalCount();
request.setAttribute("list", list);
request.setAttribute("count", total);
request.setAttribute("page", page);

3. 視圖層

  • 使用 JSTL <c:forEach> 迴圈顯示資料
  • 分頁導航元件化,支援首頁/尾頁/上一頁/下一頁/頁碼跳轉
  • 加入每頁筆數選擇器(10/15/20/50)

現代化改進方向

  • 後端改用 Spring Boot + MyBatis/JPA
  • 前端採用 Vue/React + ElementUI/Ant Design 分頁元件
  • 大數據量採用游標分頁 WHERE id > last_id LIMIT n 避免 OFFSET 深分頁效能問題
  • 加入 Redis 快取熱門頁面
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved