取出所有符合条件的数据,放到结果集当中,然后逐页浏览。
在点击下一页显示记录的时候是不是不用sql语句重新查询数据库了,而是只要在结果集中找就行了?

解决方案 »

  1.   

    差不多吧
    分页显示就是全部查出来放到一个地方,逐页显示。
    查看每页的时候不再调数据库,优点就是调库次数少,缺点是全部记录多的时候耗内存另外还有一种分页查询,
    就是where id>(页数-1)*每页条数 order by id limit 每页条数;
    优点是可以控制查询条数,从而控制内存和调库次数
    缺点,因为可控所以缺点可忽略,哈哈基本上都用分页查询
      

  2.   

    网上例子大把,自己copy一个研究吧.
      

  3.   

    但是我在下面的例子中遇到了问题:就是当sql语句中有查询条件phone时,显示第一页的时候从index.jsp页面提取phone参数,out.print("phone")显示“13588425062”
    当我点下一页的时候,出现了错误,out.print("phone")显示null后来我是在out.print(" <a href=Select.jsp?dipage="+(dipage+1)+"> 下一页&nbsp&nbsp </a> "); 中,增加了&phone="+phone+"以便传递参数后解决的问题
    out.print("<a href=Select.jsp?dipage="+(dipage+1)+"&phone="+phone+">下一页&nbsp&nbsp</a>"); 
    所以我在想,既然下一页后不用查询了,那我所用到的sql语句在点下一页后参数不全也是可以读出数据的啊select.jsp如下:
    -------select.jsp-----------------------------
    <%@   page   contentType="text/html;charset=gb2312"%> 
    <%@   page   import="java.sql.*"%> 
    <%@   page   import="java.util.*"%> 
    <% 
        int   dipage=1;//当前页码默认为1 
        String   pages=request.getParameter("dipage"); 
        if(pages==null){pages="1";} 
        try{dipage=Integer.parseInt(pages);} 
        catch(Exception   e){dipage=1;} 
    %> 
    <html> 
    <body> 
    <%   
          Connection   con; 
          Statement   stmt;     
          String   url; 
          ResultSet   rs; 
          
          try 
          {Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
          } 
          catch(ClassNotFoundException   e){out.print("类找不到!");} 
          try 
          {         
                                
                String   phone=request.getParameter("phone"); 
                String   sql="select   mbno,msgcontent,feeid,stat,rpttime,spno   from   dbYMsms..tSmsMtRpt   where   mbno='"+phone+"'   and   upper(feeid)!='HELP'   order   by   rpttime";   
                url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=dbYMsms"; 
                con=DriverManager.getConnection(url,"sa","123456"); 
                stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);             
                rs=stmt.executeQuery(sql); 
                
                int   countRecord=0;//记录条数 
                int   countPageRecord=0;//每页记录条数 
                int   countPage=0;//总页数 
                countPageRecord=15;//每页15条记录,设置每页记录条数 
                rs.last(); 
                countRecord=rs.getRow(); 
                if(countRecord%countPageRecord==0) 
                { 
                      countPage=countRecord/countPageRecord; 
                } 
                else   
                { 
                      countPage=countRecord/countPageRecord+1; 
                } 
                if((dipage-1)*countPageRecord==0) 
                { 
                      rs.beforeFirst(); 
                } 
                else   
                { 
                    rs.absolute((dipage-1)*countPageRecord+1); 
                } 
                out.print(" <Table   Border> "); 
                out.print(" <hr   color=red> "); 
                out.print(" <form   action=Select.jsp   method=post> "); 
                out.print(" <td   colspan=10> "); 
                out.print(" </td> </tr> </form> "); 
                out.print(" <tr> "); 
                    out.print(" <tr> <td   colspan=20   align=center> 对此用户的MT信息 </td> </tr> "); 
                    out.print(" <td   width=90> "+"用户手机号码"); 
                    out.print(" <td   width=340> "+"短信内容"); 
                    out.print(" <td   width=70> "+"业务代码"); 
                    out.print(" <td   width=65> "+"MT状态"); 
                    out.print(" <td   width=90> "+"报告时间"); 
                    out.print(" <td   width=95> "+"所用接入号"); 
                out.print(" </tr> "); 
                int   i=0; 
            while(rs.next()) 
            { 
                out.print(" <tr> "); 
                    out.print(" <td> "+rs.getString(1)+" </td> "); 
                    out.print(" <td> "+rs.getString(2)+" </td> "); 
                    out.print(" <td> "+rs.getString(3)+" </td> "); 
                    out.print(" <td> "+rs.getString(4)+" </td> "); 
                    out.print(" <td> "+rs.getString(5)+" </td> "); 
                    out.print(" <td> "+rs.getString(6)+" </td> "); 
                out.print(" </tr> "); 
                i++; 
                if(i> =countPageRecord)break; 
            } 
            out.print(" <tr> <td   colspan=20   align=center> "); 
            out.print("共"+countRecord+"条记录,共"+countPage+"页,当前第"+dipage+"页,每页"+countPageRecord+"条记录"); 
            if(dipage==1){} 
            else 
            { 
                  out.print(" <a   href=Select.jsp?dipage=1> 首页&nbsp&nbsp </a> "); 
                  out.print(" <a   href=Select.jsp?dipage="+(dipage-1)+"> 上一页&nbsp&nbsp </a> "); 
            } 
            if(dipage==countPage){} 
            else 
            { 
                  out.print(" <a   href=Select.jsp?dipage="+(dipage+1)+"> 下一页&nbsp&nbsp </a> "); 
                  out.print(" <a   href=Select.jsp?dipage="+countPage+"> 末页 </a> "); 
            } 
            out.print(" </Table> "); 
            stmt.close(); 
            con.close(); 
          } 
      catch(SQLException   e1) 
      { 
        out.print("SQL异常"); 
      } 
    %> 
    </body> 
    </html> 
      

  4.   

    你这样做是每次都把所有的查出来,然后在显示其中一部分所谓的分页显示应该添加一个:1.从session中取结果集存入变量 
    2.if(变量==null)
     {
       从数据库中去结果集;
       把结果集存入session;
     }这个下面才是把结果集分页显示
      

  5.   

    1.数据库连接要使用链接池
    2.数据量比较小时,可以一次全部取出放在内存中
    3.数据量大时,全部取出再分页是不现实的。按楼上说的做分页查询吧。Hibernate,JDBC都有相应的支持