<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="java.sql.*"%>
<%@ page import="java.lang.Math.*" %>
<jsp:useBean id="userBean" scope="page" class="我的bean"/>
                  int t;
int mtotal;
t=0;
String strSQLsize="SELECT * FROM 数据表";
ResultSet RSsize = userBean.executeQuery(strSQLsize);
while(RSsize.next()){
t=t+1;
}
if((t%5)>0){
mtotal=t/5+1;
}else mtotal=t/5;
%><%!String pageNo, mTmp;
int i, j, k;
%>
<%
pageNo = request.getParameter("pageNo");

if(pageNo == null){
    pageNo = "1";
}
j = Integer.parseInt(pageNo); if(j < 1)
    j = 1;
if(j > mtotal)
    j = mtotal; %><%
String strSQL="SELECT * FROM 数据表";
ResultSet RSa = userBean.executeQuery(strSQL);
for(k = 0;k < (j-1)*5;k++)
{ RSa.next();
} i = 0;
k = 1;
out.print("<table border='1' bgcolor='#99CCFF'><tr><td width='296'>文章主题</td><td width='136'>作者</td></tr></table>");
while (RSa.next()) {
//out.println("ok"+i+"ok");
i = i + 1;
    //超过3条
    if(i == 6)
    {
        k = 0;
        break;
    }     
   String id=RSa.getString(1); out.print("<table  border='1'><tr><td width='296'><a href='test1.jsp?zhuti="+RSa.getString(1)+"'>"+RSa.getString(1)+"</td><td width='136'>"+RSa.getString(2)+"</td></tr></table>");
}
i = i - k;

RSa.close(); %>
<%////////////////////////////////////////////////
if(j > 1)
{
%><table>
    <tr>
    <td width='256'></td>
    <td>
    <a href="con1.jsp?pageNo=1">第一页</a>
<%
    int ii = Integer.parseInt(pageNo,10);
// out.println(ii);
    if(ii > 1)
        ii = ii -1;
    String ssTmp = Integer.toString(ii);
%>
    <a href="con1.jsp?pageNo=<%=ssTmp%>">上一页</a>
<%
}
if(j < mtotal)
{
    int ii = Integer.parseInt(pageNo,10);
    if(ii < mtotal)
        ii = ii + 1;
    String ssTmp = Integer.toString(ii);
%>
    <a href="con1.jsp?pageNo=<%=ssTmp%>">下一页</a>
    <a href="con1.jsp?pageNo=<%=mtotal%>">最后页</a>
<%
}
if(mtotal < j)
    j = mtotal;        
%></td>
</tr>
</table>

解决方案 »

  1.   

    <%@ page import="java.util.Vector"%>
    <html>
    <head>
    <title>分页显示</title>
    </head>
    <body>
    <%
    Vector vector = (Vector)session.getAttribute("vector");
    int pageSize = 3; //每页显示的记录数
    int totalNum = vector.size(); //总共要显示的记录数
    int totalPageNum = totalNum / pageSize + 1; //不能整除的话就还要一页显示余下的记录
    if (totalNum % pageSize == 0) totalPageNum = totalPageNum -1; //如果记录总数可以整除每页显示的记录数则减少一页
    String sPageNum = (String)request.getParameter("sPageNum");
    int iPageNum; //当前页数
    int iLeavePage; //剩下页数
    int currentCount; //当前要显示的记录数
    if (sPageNum == null)
    {
    iPageNum = 1;
    iLeavePage = totalPageNum - iPageNum;
    }
    else 
    {
    iPageNum = new Integer(sPageNum).intValue();
    iLeavePage = totalPageNum - iPageNum;
    }
    if ((iPageNum == totalPageNum)&&(totalNum % pageSize != 0))
    currentCount = totalNum % pageSize;
    else currentCount = pageSize;
    %>
    <%
    if (iPageNum >1)
    {
    %>
    <a href="display.jsp?sPageNum=<%= new Integer(iPageNum - 1).toString()%>">上一页</a>
    <%
    }
    if (iPageNum < totalPageNum)
    {
    %>
    <a href="display.jsp?sPageNum=<%= new Integer(iPageNum + 1).toString()%>">下一页</a>
    <%

    %>
    <table>
    <tr>
    <td>属性</td>
    <td>名字</td>
    <td>密码</td>
    </tr>
    <%
    for (int i=(iPageNum-1)*pageSize;i<(iPageNum-1)*pageSize+currentCount;i++)
    {
    String[] str = (String[])vector.get(i);
    %>
    <tr>
    <td><%out.println(str[0]);%></td>
    <td><%out.println(str[1]);%></td>
    <td><%out.println(str[2]);%></td>
    </tr>
    <%
    }
    %>
    </table>
    </body>
    </html>
      

  2.   

    1.定义一个分页数全局常量,即每页显示的数据条数。
       private final static int SKIP = 100;
     
      2.定义一个确定某个分页条数的全局变量,即该显示页的当前显示数据条数。
       private static int cur = 0;
       3.定义一个ResultSet全局变量,以便多次使用
       private static java.sql.Result rs = null;
       4.打开一个数据库连接[/pre]
       Class.forName( sqlDriver );
      java.sql.Connection conn = DriverManager.getConnection( URL, (String)userName,(String)Passwd)
      Statement stmt = conn.createStatement();
      String searchSql = "......";
      rs = stmt.executeQuery(searchSql);
     5.获取查询结果集数据(一般是在查询按钮的响应事件函数里)
       ......
      nextButton.setEnable(true);
      cur = 0;
      while( cur < SKIP && rs.next() ){
      cur ++ ;
      .....(获取rs中的记录,存入java程序的变量中)
      }
       6.显示下一页的结果集数据(一般是在下页按钮的响应事件函数里)
       if( rs.getRow() == 0 )
      {
      nextButton.setEnable(false);
      closeConnection(); --rs的cursor已经到了最后,结果集显示完毕,关闭此次的连接
      }
      cur = 0;
      if(rs != null && rs.getRow() > 0)
      {
      ....将上页显示的内容清除
      while(cur < SKIP && rs.next() )
      {
      cur ++ ;
      .....(获取结果集中的记录,存入java程序的变量中)
      }
      }
       缺陷:  此方法根据2.0版本的JDBC(具体和JDBC驱动程序的提供商有关)之前的ResultSet类产生,因为ResultSet无法将已经显示的结果集回滚,所以此法只能按照ResultSet类的定义,从左往右、从前往后的浏览数据结果。无法动态显示指定任意前后的结果集数据。
      

  3.   

    算法比较简单,但是你有没有考虑过各种分页算法的效率问题呢?一般的处理不外乎是先读出所有的记录,然后得到当前是多少页,根据每页要显示的行数,用数据库的relative(int rows)方法来绝对定位到一条记录下面,然后while循环每页要显示的行数的次数,就是这样的。这样的算法比较简单,但是效率不高,特别是在有大量数据的前提下,一次不可以把所有的数据都读出来。
      

  4.   

    eg:
    select top n * from t while id not in (select top m id from t order by id) order by id n是每页显示记录数,m是当前页前面的记录数,每次用not in把前面的记录排除,在剩下的记录中显示前面的记录从而实现分页。