实现分页显示

以SQLServer2000为数据库服务器,在test数据库下建立一个数据表Mdatas。

新建一JAVA类InsertDatas.java,插入一些测试数据。

package com.qixin.chpt13;

import java.sql.*;


public class InsertDatas {

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        String url = "jdbc:sqlserver://localhost:1433;databasename=test";
        String username = "sa";
        String password = "";
        try {
            conn = DriverManager.getConnection(url,username,password);
            stmt = conn.createStatement();
            for (int i = 0; i < 105; i++) {
                stmt.executeUpdate("insert into Mdatas values(" + i + ",'data_" + i + "')");
            }
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            ex.printStackTrace(System.out);
        }


    }
}

需要在页面中使用特定功能的时候,建议将业务逻辑封装在一个JavaBean中,然后在JSP页面中使用该JavaBean的方式实现功能。

package com.qixin.chpt13;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class PageDivBean {

    String tabName = null;
    ResultSet rs = null;
    Connection con = null;
    Statement stmt = null;
    int pageRecord = 10;
    int requestPage = 1;
    int totalPages = 1;

    public int getTotalPages() {
        int totalRecords = getTotalRecords();
        if (totalRecords % pageRecord == 0) {
            totalPages = totalRecords / pageRecord;
        } else {
            totalPages = totalRecords / pageRecord + 1;
        }
        return totalPages;
    }

    public int getPageRecord() {
        return pageRecord;
    }

    public void setPageRecord(int pageRecord) {
        this.pageRecord = pageRecord;
    }

    public int getRequestPage() {
        return requestPage;
    }

    public void setRequestPage(int requestPage) {
        this.requestPage = requestPage;
    }

    public ResultSet getRs() {
        int requestRecord = requestPage * pageRecord;
        String sql = "select A.* from  (select top " + pageRecord + " B.*  from "
                + "(select top " + requestRecord + " * from " + tabName + " order by id) AS B  "
                + "order by B.id desc) AS A order by A.id";
        try {
            rs = stmt.executeQuery(sql);
        } catch (SQLException e) {
            e.printStackTrace(System.out);
        }
        return rs;
    }

    public void setRs(ResultSet rs) {
        this.rs = rs;
    }

    public int getTotalRecords() {
        int totalRecords = 0;
        try {
            ResultSet rs = stmt.executeQuery("select count(*) from " + tabName);
            rs.next();
            totalRecords = rs.getInt(1);
        } catch (Exception e) {
            e.printStackTrace(System.out);
        }
        return totalRecords;
    }

    public String getTabName() {
        return tabName;
    }

    public void setTabName(String tabName) {
        this.tabName = tabName;
    }

    public Connection getCon() {
        return con;
    }

    public void setCon(Connection con) {
        this.con = con;
        try {
            stmt = con.createStatement();
        } catch (SQLException e) {
            e.printStackTrace(System.out);
        }
    }
}

下面,实现分页显示算法将Mdatas表中的这些记录在dataPagesBean.jsp页面中显示出来。每页显示10条记录。

分页显示的MSSQL方法:

方法一:
select top 10 * 
from Mdatas
where id not in (select top 80 id from Mdatas order by id)
order by id

方法二:
 select A.* from
 (select top 10 B.*
  from (select top 90 * from Mdatas order by id) AS B
  order by B.id desc) AS A
 order by A.id

比较效率:解答二效率更高。
<%@ page contentType="text/html; charset=gb2312" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>分页显示数据</title>
    </head>
    <body>
        <form name="form1" method="post" action="">
            <table width="30%"  border="0" align="center">
                <tr>
                    <td><div align="center"> 当前页数据显示如下:</div> </td>
                    <td> </td>
                </tr>
                <tr>
                    <td><div align="center">id</div></td>
                    <td><div align="center">data</div></td>
                </tr>
                <%
                            String rp = request.getParameter("rp");
                            if (rp == null || rp.equals("")) {
                                rp = "1";
                            }
                            int requestPage = Integer.parseInt(rp);
                %>
                <jsp:useBean id="pd" scope="request" class="com.qixin.chpt13.PageDivBean">
                    <jsp:setProperty name="pd" property="requestPage" value="<%= requestPage%>"/>
                </jsp:useBean>

                <%
                            try {
                                String url = "jdbc:sqlserver://localhost:1433;databasename=test";
                                Connection con = DriverManager.getConnection(url, "sa", "");
                                pd.setCon(con);
                                pd.setTabName("Mdatas");

                                pd.setPageRecord(10);

                                ResultSet rs = pd.getRs();
                                while (rs.next()) {
                %>
                <tr>
                    <td><div align="center"><%=rs.getString(1)%></div></td>
                    <td><div align="center"><%=rs.getString(2)%></div></td>
                </tr>
                <%
                    }
                %>
                <tr>
                    <td>   </td>
                    <td>
                        <div align="right">
                            <select name="rp">
                                <%
                                    int totalpages = pd.getTotalPages();
                                    for (int p = 1; p <= totalpages; p++) {
                                %>
                                <option value="<%=p%>"
                                        <%
                                                              if (pd.getRequestPage() == p) {
                                                                  out.print("selected");
                                                              }
                                        %>
                                        ><%=p%></option>
                                <%
                                    }
                                %>
                            </select>
                            <input type="submit" name="Submit" value="go">
                        </div></td>
                </tr>
                <%
                            } catch (Exception e) {
                                out.print("有错误发生了……");
                            }
                %>
            </table>
        </form>
    </body>
</html>
原文地址:https://www.cnblogs.com/qixin622/p/1778354.html