Servlet+mysql實現分頁技術

先讓數據庫中的數據顯示出來

數據庫信息:
這裏寫圖片描述

然後通過Servlet,使數據庫中的信息在瀏覽器中通過表格的形式顯示出來:

package com.page.one;

import javafx.print.Printer;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Page extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();

    try{
        //1.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲得數據庫連接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
        //3.創建句柄
        Statement stmt = conn.createStatement();
        //4.執行SQL語句
        ResultSet rs = stmt.executeQuery("SELECT * FROM users");
        //5.處理執行結果
        out.println("<table border=1 width=500px>");
        out.println("<tr><th>ID</th><th>用戶名</th><th>電子郵件</th><th>等級</th></tr>");
        while(rs.next()){

            out.println("<tr><td>"+rs.getInt("id")+"</td><td>"+
                    rs.getString("username")+"</td><td>"+
                    rs.getString("email")+"</td><td>"+
                    rs.getInt("grade")+"</td></tr>");

        }
        out.println("</table><br/>");
    }catch (SQLException e){
        e.printStackTrace();
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
}

}

顯示內容:
這裏寫圖片描述

添加分頁

定義分頁變量:
1. pagenow:表示第幾頁 (由用戶來決定, 因此變化)
2. pageSize:每頁顯示多少條記錄 (有程序制定,也可以讓用戶來定製)
3. pageCount: 表示共有多少頁 (這是計算出來的)
4. rowCount: 共有多少條記錄 (通過查詢數據庫得到的)

先設置變量:

   //設置總頁數變量
    int pageCount=1;
    //設置總行數變量
    int rowCount=1;
    //設置目前所在頁面
    int pageNow=1;
    //設置每頁信息行數
    int pageSize=4;

求出信息總行數

//執行SQL語句,來確定總信息數量
 ResultSet rs2 = stmt.executeQuery("SELECT count(*) FROM users");
 rs2.next();
 rowCount = rs2.getInt(1);        

求出總頁數

//計算PageCount
pageCount = rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize+1;

執行語句顯示本頁面的信息

ResultSet rs = stmt.executeQuery("SELECT * FROM users ORDER BY ID LIMIT "+(pageNow-1)*pageSize+","+pageSize);

在表下方顯示頁面

for(int i = 1; i <= pageCount; i++){
            out.println("<a href='/Page2?pageNow="+i+"'><"+i+"></a>");
        }

接收超鏈接所提交的頁面選項

String spageNow = request.getParameter("pageNow");
if(spageNow != null){
      pageNow = Integer.parseInt(spageNow);
}

因爲沒有選的時候接收到的是空值,直接不需要轉換,使用初定義就行了。

page2.java

public class Page extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();

    //設置總頁數變量
    int pageCount=1;
    //設置總行數變量
    int rowCount=1;
    //設置目前所在頁面
    int pageNow=1;
    //設置每頁信息行數
    int pageSize=4;

    String spageNow = request.getParameter("pageNow");
    if(spageNow != null){
        pageNow = Integer.parseInt(spageNow);
    }

    try{
        //1.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲得數據庫連  接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
        //3.創建句柄
        Statement stmt = conn.createStatement();


        //執行SQL語句,來確定總信息數量
        ResultSet rs2 = stmt.executeQuery("SELECT count(*) FROM users");
        rs2.next();
        rowCount = rs2.getInt(1);
        out.println("rowCount = "+rowCount);

        //計算PageCount
        pageCount = rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize+1;
        //執行SQL語句
        ResultSet rs = stmt.executeQuery("SELECT * FROM users ORDER BY ID LIMIT "+(pageNow-1)*pageSize+","+pageSize);
        //處理執行結果
        out.println("<table border=1 width=500px>");
        out.println("<tr><th>ID</th><th>用戶名</th><th>電子郵件</th><th>等級</th></tr>");
        while(rs.next()){

            out.println("<tr><td>"+rs.getInt("id")+"</td><td>"+
                    rs.getString("username")+"</td><td>"+
                    rs.getString("email")+"</td><td>"+
                    rs.getInt("grade")+"</td></tr>");

        }
        out.println("</table><br/>");
        for(int i = 1; i <= pageCount; i++){
            out.println("<a href='/Page2?pageNow="+i+"'><"+i+"></a>");
        }

    }catch (SQLException e){
        e.printStackTrace();
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
}
}

結果顯示

當然也可以完善一些,添加上上一頁與下一頁,以及跳轉頁數,但是要注意上一頁到第一頁與下一頁到最後一頁的情況,以及跳轉時輸入不在範圍內的情況:

直接上代碼吧。。
上下一頁:

        //當到第一頁時就沒有上一頁這個選項了
        if(pageNow!=1){
            out.println("<a href='/Page2?pageNow="+(pageNow-1)+"'>上一頁</a>");
        }
        for(int i = 1; i <= pageCount; i++){
            out.println("<a href='/Page2?pageNow="+i+"'><"+i+"></a>");
        }
        //當到最後一頁時就沒有下一頁這個選項了
        if(pageNow!=pageCount){
            out.println("<a href='/Page2?pageNow="+(pageNow+1)+"'>下一頁</a>");
        }

顯示分頁信息:

       //顯示分頁信息
        out.println("   當前頁:"+pageNow+"|&nbsp;總頁數:"+pageCount);

跳轉:

        out.println("<br/><br/>");
        out.println("跳轉到第<input type='text' id='pageNow' name='pageNow'/> <input type='button' onClick='gotoPageNow()' value='跳'/>");

JavaScript語言來實現跳轉:

 //添加JavaScript代碼
    out.println("<script type='text/javascript' language='javascript'>");
    out.println("function gotoPageNow(){ "+
            "var pageNow=document.getElementById('pageNow');"+
            //window.open能把pageNow傳遞給本頁面,而且能夠通過request.getParameter獲得。
            "window.open('/Page2?pageNow='+pageNow.value,'_self'); }");
    out.println("</script>");

注意超出範圍的情況:

String spageNow = request.getParameter("pageNow");

        if(spageNow!=null){
            int temp = Integer.parseInt(spageNow);
            if(temp<=pageCount&&temp>=1){
                pageNow = temp;
            }else{
                out.println("<script type='text/javascript' language='javascript'>");
                out.println("window.alert('所跳頁面不在範圍內'); ");
                out.println("</script>");
            }
        }

page.java

public class Page extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=utf-8");
    request.setCharacterEncoding("utf-8");
    PrintWriter out = response.getWriter();


    //添加JavaScript代碼
    out.println("<script type='text/javascript' language='javascript'>");
    out.println("function gotoPageNow(){ "+
            "var pageNow=document.getElementById('pageNow');"+
            //window.open能把pageNow傳遞給本頁面,而且能夠通過request.getParameter獲得。
            "window.open('/Page2?pageNow='+pageNow.value,'_self'); }");
    out.println("</script>");

    //設置總頁數變量
    int pageCount=1;
    //設置總行數變量
    int rowCount=1;
    //設置目前所在頁面
    int pageNow=1;
    //設置每頁信息行數
    int pageSize=4;



    try{
        //1.註冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2.獲得數據庫連  接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test","root","123456");
        //3.創建句柄
        Statement stmt = conn.createStatement();


        //執行SQL語句,來確定總信息數量
        ResultSet rs2 = stmt.executeQuery("SELECT count(*) FROM users");
        rs2.next();
        rowCount = rs2.getInt(1);
        out.println("rowCount = "+rowCount);

        //計算PageCount
        pageCount = rowCount%pageSize==0 ? rowCount/pageSize : rowCount/pageSize+1;

        String spageNow = request.getParameter("pageNow");

        if(spageNow!=null){
            int temp = Integer.parseInt(spageNow);
            if(temp<=pageCount&&temp>=1){
                pageNow = temp;
            }else{
                out.println("<script type='text/javascript' language='javascript'>");
                out.println("window.alert('所跳頁面不在範圍內'); ");
                out.println("</script>");
            }
        }


        //執行SQL語句
        ResultSet rs = stmt.executeQuery("SELECT * FROM users ORDER BY ID LIMIT "+(pageNow-1)*pageSize+","+pageSize);
        //處理執行結果
        out.println("<table border=1 width=500px>");
        out.println("<tr><th>ID</th><th>用戶名</th><th>電子郵件</th><th>等級</th></tr>");
        while(rs.next()){

            out.println("<tr><td>"+rs.getInt("id")+"</td><td>"+
                    rs.getString("username")+"</td><td>"+
                    rs.getString("email")+"</td><td>"+
                    rs.getInt("grade")+"</td></tr>");

        }
        out.println("</table><br/>");
        //當到第一頁時就沒有上一頁這個選項了
        if(pageNow!=1){
            out.println("<a href='/Page2?pageNow="+(pageNow-1)+"'>上一頁</a>");
        }
        for(int i = 1; i <= pageCount; i++){
            out.println("<a href='/Page2?pageNow="+i+"'><"+i+"></a>");
        }
        //當到最後一頁時就沒有下一頁這個選項了
        if(pageNow!=pageCount){
            out.println("<a href='/Page2?pageNow="+(pageNow+1)+"'>下一頁</a>");
        }

        //顯示分頁信息
        out.println("   當前頁:"+pageNow+"|&nbsp;總頁數:"+pageCount);
        out.println("<br/><br/>");
        out.println("跳轉到第<input type='text' id='pageNow' name='pageNow'/> <input type='button' onClick='gotoPageNow()' value='跳'/>");

    }catch (SQLException e){
        e.printStackTrace();
    }catch (ClassNotFoundException e){
        e.printStackTrace();
    }
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.doGet(request, response);
}

}

結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章