1. 程式人生 > >MySQL資料庫+jsp+servlet實現分頁查詢

MySQL資料庫+jsp+servlet實現分頁查詢

    前一段做的那個jsp+servlet的小專案用到了分頁查詢,今天總結到部落格上面,以後忘記了自己可以看,也分享給大家.

    這個專案使用的資料庫是MySQL,在MySQL資料庫中使用

select user_id,username from user limit  (pageNo-1)*pageSize,pageSize

就可以達到分段查詢的目的,pageNo是頁碼數,pageSize是每頁的容量,如果pageNo=1,pageSize=5的話,那就是取前五條資料,那第二頁就是取出5-10條資料,依次類推.

    在這個專案的util包中加入了一個pageUtil的工具類,這個類主要是封裝每頁顯示的資料,比如pageNo(當前頁碼),pageSize(每頁要顯示的資料條數),totalCount,(總記錄的條數),data(當前頁的資料集合),totalPage(總頁數),這個類中的程式碼如下:

package com.team5.util;

import java.util.List;

import com.team5.hurui.bean.Dope;

/**
 * 分頁工具類(封裝每頁需要顯示的資料)
 * 
 * @author 
 * 
 */
public class PageUtil {
    // 當前頁頁碼(1,2,3....)
    private int pageNo;

    // 每頁顯示條數
    private int pageSize;

    // 總記錄(條數)
    private int totalCount;

    // 當前頁資料集合
private List data; // 總頁數 private int totalPage; /** * 構造方法,傳遞每頁條數和總記錄數 * * @param 每頁顯示條數 * @param 總記錄數 */ public PageUtil(int pageSize, int totalCount) { this.pageSize = pageSize; this.totalCount = totalCount; if (this.totalCount % this
.pageSize == 0) { // 計算總頁數 this.totalPage = this.totalCount / this.pageSize; } else { this.totalPage = this.totalCount / this.pageSize + 1; } } public List getData() { return data; } public void setData(List data) { this.data = data; } public int getPageNo() { return pageNo; } public void setPageNo(int pageNo) { this.pageNo = pageNo; } public int getPageSize() { return pageSize; } public int getTotalCount() { return totalCount; } public int getTotalPage() { return totalPage; } }

之後在dao類的實現類中使用prepareStatement的executeQuery()方法查詢出每條資料的屬性值,並將其賦給bean類中寫好的實體類的屬性中,然後將實體類的物件放在一個list中,再將這個list給pageUtil類的data集合.
dao的實現類中有關分頁的程式碼:


     //根據頁碼和每頁的容量來得到資料
    @Override
    public PageUtil getPage(int pageNo, int pageSize) {
        Connection conn = DBManager.getConnection();
        PreparedStatement ps = null;
        ResultSet rs = null;
        List<User> list = new ArrayList<User>();
        PageUtil page = null;
        try {
            //獲取總資料條數
            int totalCount = 0; 
            ps = conn.prepareStatement("select count(user_id) from user");
            rs = ps.executeQuery();
            while(rs.next()){
                totalCount = rs.getInt(1);
            }
            ps = conn.prepareStatement("select user_id,username from user limit " + (pageNo-1)*pageSize+","+pageSize);
            rs = ps.executeQuery();
            while(rs.next()){
                User user = new User();
                user.setUser_id(rs.getInt(1));
                user.setUsername(rs.getString(2));
                list.add(user);
            }
            page = new PageUtil(pageSize, totalCount);
            page.setData(list);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            DBManager.closeAll(rs, ps, conn);
        }

        return page;
    }

然後在servlet中使用request.getParameter(“pageNo”)來獲取到當前的頁碼數,接下來的程式碼:

//設定每頁顯示十條資料
            PageUtil page = usi.getPage(pageNo, 10);
            page.setPageNo(pageNo);
            request.setAttribute("page", page);
            request.getRequestDispatcher("admin/showUserList.jsp").forward(request, response);

設定每頁顯示的資料條數,然後page物件傳遞給jsp,在jsp中使用foreach迴圈:

<c:forEach var="list" items="${page.data}">
            <tr>
              <td align="center" class="altbg2"><input name="item" type="checkbox" id="item" value="${list.user_id}" ></td>
                <td align="center" class="altbg2">
                    ${list.username}
                </td>
                <td class="altbg2" align="center">
                    ${list.user_id} 
                </td>
                <td class="altbg2" align="center">
                </td>
            </tr>

        </c:forEach>


<tr><td class="altbg2" colspan="7" rowspan="2" align="right">
                總共【${page.totalPage}】頁 &nbsp;&nbsp;${page.pageNo}/${page.totalPage}&nbsp;&nbsp; <a href="zcUserServlet?method=showPage&pageNo=1">首頁</a> <c:choose>
                    <c:when test="${requestScope.page.pageNo > 1}">
                        <a href="zcUserServlet?method=showPage&pageNo=${page.pageNo-1}">上一頁</a>
                    </c:when>
                    <c:otherwise>
                        上一頁
                    </c:otherwise>
                </c:choose>

                <c:choose>
                    <c:when test="${page.pageNo < page.totalPage}">
                        <a href="zcUserServlet?method=showPage&pageNo=${page.pageNo+1}">下一頁</a>
                    </c:when>
                    <c:otherwise>
                        下一頁
                    </c:otherwise>
                </c:choose>
                  <a href="zcUserServlet?method=showPage&pageNo=${page.totalPage}">尾頁</a>          </td>
            </tr>

這樣把page物件傳遞過來之後就可以呼叫pageUtil類中的屬性了.這樣分頁基本就做完了,當然,如果想做的更好看點,還可以使用pagination之類的外掛.