1. 程式人生 > >初級_獲取MySQL資料分頁查詢顯示在前端

初級_獲取MySQL資料分頁查詢顯示在前端

分頁查詢

分頁查詢的功能分析:

物理分頁:不是一次性將所有資料全部查詢出來.查詢第一頁:傳送一條查詢幾條的SQL語句.查詢下一頁資料:又傳送一條查詢後幾條的SQL

主要依賴 select * from 資料庫名 where 條件 limit a,b;(從a開始每次查詢b條記錄)

前臺向後臺傳遞資料:

前臺要顯示: 總頁數,當前頁,總記錄數.每頁顯示多少條記錄 首頁 上一頁下一頁 末頁 指定跳頁

第一次訪問前臺要向後臺傳遞一個當前頁數和每頁顯示多少條記錄

後臺向前臺傳遞資料:

總頁數,當前頁,總記錄數.每頁顯示多少條記錄.以及查詢到的記錄所在的List集合 .指定跳到那

因為要傳遞的內容多,所以將這些內容封裝在一個新建的對應的javabean物件中傳遞

部分程式碼體現:

javaDao部分:

public int findCount() throws SQLException{ //獲取到資料庫的總記錄數
QueryRunner qr=new QueryRunner(JDBCUtils3.getDataSource());
Object query = qr.query("select count(*) from customer",new ScalarHandler());
Long count=(Long) query;
return count.intValue();
}

public List<Customer> findByPage(int a,int b) throws SQLException{//將查詢到記錄封裝到List<Customer>集合中
QueryRunner qr=new QueryRunner(JDBCUtils3.getDataSource());
List<Customer> list = qr.query("select * from customer limit ?,? ", new BeanListHandler<Customer>(Customer.class),a,b);
return list;
}

servlet部分:

response.setContentType("text/html;charset=utf-8");
int a = 0;
int b = 0;
//
指定跳轉頁面的程式碼將放在try catch中      try裡面的程式碼就是為了處理使用者指定跳頁的功能的
// 如果正常訪問,沒有shippage傳過來.就執行catch中的內容.如果傳過來了shippage.就執行try裡面的
try {
int c = Integer.parseInt(request.getParameter("ccc"));
System.out.println(c);
int s = Integer.parseInt(request.getParameter("shippage"));// 獲得表單中使用者輸入的要跳轉頁面
System.out.println(s);
if (s <= 0) { // 如果輸入頁面<=0.那麼調到第一頁
b = Integer.parseInt(request.getParameter("bbb"));
a = 0;
} else if (s > 0 && s <= c) { // 正常跳轉
b = Integer.parseInt(request.getParameter("bbb"));// 獲得表單傳過來的當前一個頁面顯示的資訊數
a = b * s - b; // a就是指定跳轉頁面在資料庫中開始擷取的位置,b是一次擷取顯示幾條資訊
} else if (s > c) { // 如果輸入頁面大於總頁面,跳到最大頁面
b = Integer.parseInt(request.getParameter("bbb"));
a = b * c - b;
}
} catch (Exception e) {
// 如果正常訪問,會獲取Main.jsp中傳過來的a和b
a = Integer.parseInt(request.getParameter("aaa"));
b = Integer.parseInt(request.getParameter("bbb"));
}

List<Customer> findByPage = null;
try {
findByPage = CustomerService.findByPage(a, b);// 獲得資料庫中從位置a開始長度為b擷取的集合.
} catch (SQLException e) {
e.printStackTrace();
}
int count = 0;
try {
count = CustomerService.findCount();// 獲得資料庫中總的資料個數
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
PageBean pb = new PageBean();// 資料量有點多,所以把當前頁,總頁數,頁面顯示條數,總資料數和存物件的集合封裝在一個新的
pb.setShowPage(b);
pb.setCount(count);
pb.setNowPage(a / b + 1);//nowPage就是當前頁
pb.setPagelist(findByPage);
int countPage = 0;
if (count % b == 0) { // 判斷總頁數的個數,有兩種可能
countPage = count / b;
} else {
countPage = count / b + 1;
}
pb.setCountPage(countPage);
request.setAttribute("pagebean", pb);      //將pagebean儲存在request域中
request.getRequestDispatcher("/FindByPage.jsp").forward(request,
res

ponse);

jsp部分:

<form action="findbypage?bbb=${requestScope.pagebean.showPage}" method="post"> 

<table align="center" border="2" width="100%">
<tr>
<td colspan="9"></td>
<td><a href="Main.jsp">回到首頁</a>
</td>
</tr>
<tr>
<td>編號</td>
<td>使用者姓名</td>
<td>使用者性別</td>
<td>使用者生日</td>
<td>使用者電話</td>
<td>使用者郵箱</td>
<td>使用者興趣</td>
<td>使用者類別</td>
<td>使用者描述</td>
<td>使用者操作</td>
</tr>

<c:forEach items="${pagebean.pagelist }" var="c" //遍歷儲存記錄的集合生成表單
varStatus="status">
<tr>
<td>${status.count}</td> //計數功能
<td>${c.name}</td>
<td>${c.gender}</td>
<td>${c.birthday}</td>
<td>${c.callphone}</td>
<td>${c.email}</td>
<td>${c.hobby}</td>
<td>${c.type}</td>
<td>${c.description}</td>
<td><a href="updateservlet?customer=${c.id}">修改 &nbsp;</a><a
href="delectservlet?id=${c.id}">刪除</a>
</td>
</tr>
</c:forEach>
<tr>
<td colspan="10" align="right"><c:iftest="${pagebean.nowPage>1}">       //當前頁面大於1才顯示首頁和上一頁.等於1的時候隱藏
<a href="findbypage?aaa=0&bbb=${pagebean.showPage}">首頁</a>&nbsp;        //點選首頁的話傳遞 a=0 b=當前頁面顯示的記錄個數給servlet
<a href="findbypage?aaa=${pagebean.showPage*pagebean.nowPage-2*pagebean.showPage}&bbb=${pagebean.showPage}">上一頁</a>&nbsp;  
</c:if> 第${pagebean.nowPage}/${pagebean.countPage}頁&nbsp;     //顯示總頁面和當前頁面

 <c:if test="${pagebean.nowPage<pagebean.countPage}">      //判斷當前頁面和總頁面的關係.適當隱藏尾頁和下一頁
<a href="findbypage?aaa=${pagebean.showPage*pagebean.nowPage}&bbb=${pagebean.showPage}">下一頁</a>
<a href="findbypage?aaa=${pagebean.showPage*pagebean.countPage-pagebean.showPage}&bbb=${pagebean.showPage}">尾頁</a>&nbsp;
</c:if> 當前每頁顯示${pagebean.showPage}條記錄,你還可以<a href="findbypage?aaa=0&bbb=5">以5條每頁顯示</a>&nbsp;或者&nbsp;

<ahref="findbypage?aaa=0&bbb=10">以10條每頁顯示</a>&nbsp;              //設定兩個可選的頁面顯示記錄數

 <input type="text" name="shippage"><input type="hidden" name="ccc"       //實現跳轉指定頁面功能
value="${pagebean.countPage}"><input type="submit"
value="跳轉">&nbsp;</td>//不知道為什麼當時 ccc在action位址列那個地方傳遞不到servlet,所以在這裡設定一個隱藏框用於傳遞
</tr>
</table>
</form>

感覺寫的很low,畢竟我是新手,嘿嘿 .當筆記了.謝謝看的到的人

//sHaqIMa