不管是否分页,显示基本是一样的,只不过从数据库取回的数据不同,不分页就全部取回,分页就只取回指定页对应的行。下面以SQLServer为例说明怎么分页从数据库中取回数据吧。假设每页10行,现在要取第8页的数据,用下面的查询:
select top 10 * from myTable where id not in (select top 70 id from myTable order by id) order by id
SQLServer的查询中"top n"表示只返回符合条前的前n行,如果有order by子句,“前n行”是指经过order by排序后的前n行。上面的例子中,后面的子查询用来排除掉前70行(即前面7页的数据)的,order by子句不能省,否则多次执行上面语句,每次排除掉的70行可能不一样。同理,主查询的order by子句也不能省。其它数据库的查询方法要看数据库的SQL手册了,我也不懂。

解决方案 »

  1.   

    int PageSize=6;//设置每张网页显示6笔记录
      int ShowPage=1;//设置欲显示的页数
      int RowCount=0;//ResultSet的记录笔数
      int PageCount=0;//ResultSet分页后的总页数
    Connection con=null;                                                                 
     try{                                                
         String sql="SELECT user_ID,user_historymoney,user_operatedate,user_time,user_operatortype,user_operatemoney,user_money1,operatornumber FROM jyls WHERE user_ID="
               +"'"+loguser+"'"
               +"AND user_operatedate<="
               +"'"+date4+"'"
               +"AND user_operatedate>="
               +"'"+date3+"'";
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");       
     con=DriverManager.getConnection("jdbc:odbc:lcc");  
     ResultSet rs=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY).executeQuery(sql);//创建可回滚的结果集对象,并执行SQL语句
      if(!rs.next())
       {
       request.setAttribute("timeflow","flow1"); 
       %>                                      
              <jsp:forward page="userhistoryquery.jsp"/>    
          <%                                     
       }
       else{
       rs.last();//将指标移至最后一笔记录
       RowCount=rs.getRow();//取得ResultSet中记录的笔数
       //计算显示的页数
       PageCount=((RowCount%PageSize)==0?(RowCount/PageSize):(RowCount/PageSize)+1);
    String ToPage=request.getParameter("ToPage"); 
       if(ToPage!=null)
       {
       ShowPage=Integer.parseInt(ToPage);
       if(ShowPage>PageCount)
       {
       ShowPage=PageCount;
       }
       else if(ShowPage<=0)
       {
         ShowPage=1;
       }
       }
       %>
    <html>
    <head>
    <title>客户历史帐目</title>
    </head>
    <br/>
    <br/>
    <br/>
    <body bgcolor=lightblue>
    <center>
    <p><font size=4 color=#CD5C5C face="黑体">历史帐目查询</font>
    <br/>
    <br/>
    <font size=3 color=#CD5C5C><%=date3%>到<%=date4%></font></p>
    <center>
    <h3>当前在第<font size=3 color=red><%=ShowPage%></font>页,共<font size=3 color=red><%=PageCount%></font>页</h3>
    <br/>
    <%
       //计算欲显示页的第一笔记录位置
       rs.absolute((ShowPage-1)*PageSize+1);
       out.print("<table BORDER=0 CELLSPACING=0 CELLPADDING=0 bgcolor=white align=center>");
       out.print("<tr>");
       out.print("<td>");
       out.print("<table width=100% BORDER=0 CELLSPACING=1 CELLPADDING=1>");
       out.print("<tr bgcolor=lightblue align=center>");
       out.print("<th>"+"历史金额");
       out.print("<th>"+"发生金额");
       out.print("<th>"+"帐户余额");
       out.print("<th>"+"操作日期");
       out.print("<th>"+"操作时间");
       out.print("<th>"+"操作类型");
       out.print("<th>"+"操作员号码");
       out.print("</tr>");
       //利用FOR循环配合PageSize属性输出一页中的记录
       for(int i=1;i<=PageSize;i++)
         {
         // get fields from row
         String dbhistorymoney = rs.getString("user_historymoney");
         String dboperatemoney = rs.getString("user_operatemoney");
         String dbmoney1=rs.getString("user_money1");
         String dboperatedate= rs.getString("user_operatedate"); 
         String dbtime=rs.getString("user_time");
         String dboperatortype=rs.getString("user_operatortype"); 
         String dboperatornumber=rs.getString("operatornumber");  
          out.print("<tr bgcolor=lightblue align=center>");
          out.print("<th>"+dbhistorymoney);
          out.print("<th>"+dboperatemoney);
          out.print("<th>"+dbmoney1);
          out.print("<th>"+dboperatedate);
          out.print("<th>"+dbtime);
          out.print("<th>"+dboperatortype);
          out.print("<th>"+dboperatornumber);
          out.print("</tr>");
          if(!rs.next())//判断是否到达最后一笔记录
          {
          break;
          }
          }
          out.print("</table>");
          out.print("</td>");
          out.print("</tr>");
          out.print("</table>"); 
         %>
          <br/>
          <table>
          <tr valign=baseline align=center>
          <%
          //判断目前所在分页是否为第一页,不是则显示到第一页和上一页的超链接
          if(ShowPage!=1)
          {
          %>
          <td width=100>
          <A href="userhistoryquery1.jsp?ToPage=<%=1%>&date1=<%=date1%>&date2=<%=date2%>">到第一页</A>
          </td>
          <td width=100>
          <A href="userhistoryquery1.jsp?ToPage=<%=ShowPage-1%>&date1=<%=date1%>&date2=<%=date2%>">到上一页</A>
          </td>
          <%
          }
          //判断目前所在分页是否为最后一页,不是则显示到最后一页以ToPage参数传递自己
          if(ShowPage!=PageCount)
          {
          %>
          <td width=100>
          <A href="userhistoryquery1.jsp?ToPage=<%=(ShowPage+1)%>&date1=<%=date1%>&date2=<%=date2%>">到下一页</A>
          </td>
          <td width=100>
          <A href="userhistoryquery1.jsp?ToPage=<%=PageCount%>&date1=<%=date1%>&date2=<%=date2%>">到最后一页</A>
          </td>
          <%
          }
          %>
          <td width=100>
          <form action="userhistoryquery1.jsp" method="post" name="form1">
          到
          <input type="text" name="ToPage" style="height:20px;width:40px" value=<%=ShowPage%>>页
          <input type="hidden" name="date1" value=<%=date3%>>
          <input type="hidden" name="date2" value=<%=date4%>>
          </form>
          </td>
          </tr>
          </table>
         <%
         rs.close();//关闭结果集
         con.close();//关闭数据库连接