分頁是 Web 應用中最常見的數據展示需求。本文提供一個基於 JSP + JDBC 的完整分頁實現示例,涵蓋數據庫查詢、分頁邏輯計算、前端頁碼導航渲染,適合傳統 Java Web 專案快速參考。
int pageSize = 10; // 每頁記錄數
int showPage = 1; // 當前頁碼
int recCount = 0; // 總記錄數
int pageCount = 0; // 總頁數
使用 ResultSet.TYPE_SCROLL_SENSITIVE 可滾動游標:
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY
);
ResultSet rs = stmt.executeQuery("SELECT * FROM hl_news WHERE smallname=? ORDER BY ID DESC");
if (rs.next()) {
rs.last(); // 移至最後一行
recCount = rs.getRow(); // 獲取總行數
pageCount = (recCount % pageSize == 0) ?
recCount / pageSize : recCount / pageSize + 1;
}
String toPage = request.getParameter("page");
if (toPage != null) showPage = Integer.parseInt(toPage);
rs.absolute((showPage - 1) * pageSize + 1); // 跳轉到當前頁第一條
for (int i = 1; i <= pageSize; i++) {
// 讀取欄位並輸出 HTML 表格行
int NID = rs.getInt("ID");
String title = rs.getString("Title");
// ... 其他欄位
if (!rs.next()) break; // 防止最後一頁不足 pageSize 時越界
}
<div align="left" class="t2">
共<%=pageCount%>頁
<% for (int i = 1; i <= pageCount; i++) { %>
<% if (i == showPage) { %>
<b><%=i%></b>
<% } else { %>
[<a href='Hanye_Manages.jsp?BigClassName=<%=bgname%>&page=<%=i%>&modi=新聞'><%=i%></a>]
<% } %>
<% } %>
</div>
op=del 參數執行刪除並跳轉hl_smallclass 生成分類鏈接ResultSet、Statement、Connection 依序關閉PreparedStatement 替代字串拼接LIMIT offset, size (MySQL) 或 ROW_NUMBER() (Oracle/SQLServer) 避免全表掃描iso8859_1 轉碼亂碼本示例展示了傳統 JSP 實現分頁的完整流程,雖然技術棧較老舊,但分頁核心邏輯(總數統計、偏移定位、頁碼渲染)具有普遍性。現代項目建議配合 MyBatis PageHelper、Spring Data Pagination 等成熟框架,專注業務創新而非重複造輪子。