最近一直在做期末的項目,所以遇見了很多問題,解決了,就會在這裡寫出來和大家分享。。。。
用了一個上午,自己想,和參考一些東西以後,做出了數據庫分頁查看的功能,覺得還算清晰吧,希望大家多多指教。。。
思路是這樣的:使用javabean來操作分頁的控制數據,然後在jsp裡實現,在頁面最後的下一頁之類的連接,增加了參數值的判斷,完美的解決了一些問題。
詳細的看源碼吧。。。
View.java
public class View {
private int currentPage;// 記錄當前的頁數
private int pageSize;// 每頁顯示的記錄數
private int recordCount;// 一共有多少條記錄
public View(int pageSize, int recordCount, int currentPage) {
this.pageSize = pageSize;
this.recordCount = recordCount;
this.setCurrentPage(currentPage);
}
// 計算總的頁數
public int getPageCount() {
int size = recordCount / pageSize;// 總頁數=總條數/每頁要現實的記錄
int flag = recordCount % pageSize;// 取模運算,為了計算最後一頁要顯示的條數
if (flag != 0) {
size++;
}
// 根據記錄數判斷返回的總頁數
if (recordCount == 0) {// 如果有0條記錄
// 返回只有1頁
return 1;
}
// 返回計算出來的頁數
return size;
}
// 設置sql語句中,limit的索引起始位置,從0開始
public int getFromIndex() {
return (currentPage - 1) * pageSize;// 重點算法:(當前頁碼-1)*每頁記錄數=索引的起始位置
}
// 設置當前頁
public void setCurrentPage(int currentPage) {
// 為什麼要設置?
/*
* 因為:在jsp頁面中,會放置首頁和上一頁,下一頁和末頁兩個按鈕
* 當在最後一頁點擊下一頁時,此時獲得頁面數會大於實際的頁面,所以頁面就要保持在最後一頁
* 當在第一頁點擊上一頁,此時獲得的頁面數會小於或=0,此時就要一直保持在第一頁
*/
int vaildPage = currentPage <= 0 ? 1 : currentPage;
vaildPage = vaildPage > this.getPageCount() ? this.getPageCount()
: vaildPage;
this.currentPage = vaildPage;
}
// 得到當前頁,用於顯示在JSP中
public int getCurrentPage() {
return currentPage;
}
// 得到每頁顯示的記錄數
public int getPageSize() {
return pageSize;
}
}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="java.sql.Connection"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="com.view.View"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>分頁查看數據庫</title>
</head>
<body>
<%!//數據庫連接信息
public static final String URL = "jdbc:mysql://localhost:3306/j2ee";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";%>
<%
//連接數據庫,獲取有多少條記錄
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(URL, USERNAME,
PASSWORD);
String sqlCount = "select count(*) from employee";//得到一共有多少條記錄
PreparedStatement ps = conn.prepareStatement(sqlCount);
ResultSet rs = ps.executeQuery();
int recordCount = 0;//一共有多少記錄
if (rs.next()) {
recordCount = rs.getInt(1);
}
%>
<%
//獲取分頁對象,傳參
String pageStr = request.getParameter("page");
int currentPage = 1;
if (pageStr != null) {
currentPage = Integer.parseInt(pageStr);
}
View view = new View(5, recordCount, currentPage);
//獲取參數
int fromIndex = view.getFromIndex();//起始位置
int pageSize = view.getPageSize();//每頁顯示的記錄數
%>
<table border="1">
<%
//執行sql
String sql = "select fname,lname from employee limit ?,?";
ps = conn.prepareStatement(sql);
ps.setInt(1, fromIndex);
ps.setInt(2, pageSize);
rs = ps.executeQuery();
while (rs.next()) {
String fname = rs.getString(1);
String lname = rs.getString(2);
%>
<tr>
<td><%=fname%></td>
<td><%=lname%></td>
</tr>
<%
}
%>
</table>
<%
//關閉連接
if (ps != null) {
ps.close();
}
if (rs != null) {
rs.close();
}
if (conn != null) {
conn.close();
}
%>
當前第<%=view.getCurrentPage()%>頁,一共<%=view.getPageCount()%>頁<br/>
<a href="index.jsp?page=1">首頁</a>
<%
if ((view.getCurrentPage() - 1) <= 0) {
%>
<a href="index.jsp?page=1">上一頁</a>
<%
} else {
%>
<a href="index.jsp?page=<%=(view.getCurrentPage() - 1)%>">上一頁</a>
<%
}
%>
<%
if ((view.getCurrentPage() + 1) > view.getPageCount()) {
%>
<%
} else {
%>
<a href="index.jsp?page=<%=(view.getCurrentPage() + 1)%>">下一頁</a>
<%
}
%>
<a href="index.jsp?page=<%=view.getPageCount()%>">末頁</a>
<br>
</body>
</html>
摘自:技術豆子的博客