因为你的list中放的是map,你用rs.get(i)这样取就把所有的map内容取出来了,你应该先去map,然后到map中取每个字段的内容

解决方案 »

  1.   

    2 你把list的长度打印出来看看是多少,错误提示是越界了.
      

  2.   

    3.你这样做把这么多数据放到session中去呀,如果是多个用户的话,你的系统会很快就崩溃的.内存消耗太大了
      

  3.   

    /**
     * <p>Title: 分页程序</p>
     * <p>Description: 根据条件分页显示</p>
     * <p>Copyright: Copyright (c) 2004</p>
     * <p>Company: 广东有限公司</p>
     * @author 网络信息部 庆丰
     * @version 1.0
     */
    package erp.com;import java.sql.*;
    import java.io.*;
    import erp.db.*;
    public class turnPage extends Object implements java.io.Serializable {ResultSet CountTopicrs=null;//初始化总记录数Rs变量
    ResultSet Pagirs=null;//初始化分页时每页的记录集数Rs变量private int intCountTopic=0;//主题总数,即select选出的、库中所有记录总数
    public int intPageSize;//每页显示主题数,即每页显示的记录总数
    public int intPageCount;//总页数
    public int intPage=0; //当前页数
    private String  Countsql=null,Pagisql=null,str=null,str_where=null;
    private String str_parameter="";
    private String nowPage;//初始化当前页intPage变量,以准确便获取当前页,即获取当前页的具体页号。
    private String HttpFile;//当前的地址栏的文件,即具体jsp文件。//Linkdb db = new Linkdb();//连接数据库//接收传分页参数public void ProductPage(){}
    public void  setPages(int n)
    {
     intPageSize = n;
    }  /*功能:接收参数组织SQL语句
       *str_table :分页显示的表名
       *str_where:分页的where条件
       *httpfile :具体jsp文件
       *pages :获取地址栏传过来的pages参数
       */
    public ResultSet setQuerysql(String strWhat,String str_table,String str_where, String strOrder,String httpfile,String pages)throws SQLException
    {
    ResultSet r=null;
    this.nowPage=pages;
    this.HttpFile=httpfile;//分页文件名
    Countsql="select count(*) from "+str_table+" "+str_where;
    Pagisql="select "+strWhat+" from "+str_table+" "+str_where+" "+strOrder;
    try{
    r=querySql(Countsql,Pagisql);
    }catch(SQLException _ex)
    {System.out.println(_ex);}
    return r;
    }  /*功能:接收参数进行首尾页判断
       *Countsql:总记录的Query字符串。[形式为select count(*) from tablename]
       *Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]
       *request :参数传递过程中的变量。[用来控制翻页时的pages变量]
       */
    public ResultSet querySql(String Countsql,String Pagisql)//,HttpServletRequest request
    throws SQLException{
    //获取当前文件名。
    //HttpFile=request.getRequestURI();
    //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]
    //nowPage=request.getParameter("pages");//由参数HttpServletRequest request传递而来if (nowPage==null)
       { intPage=1; }
    else
      {
       intPage=Integer.parseInt(nowPage);
       if (intPage<1)
          intPage=1;
      }//end else//获取总记录数的结果集。
      Connection con=null;
      Conn conn=new Conn();
      con=conn.getConn();
       ResultSet Pagirs=null;
       //System.out.print("翻页获取"+con);
      // System.out.print("翻页获取"+con.getAutoCommit());
          try
            {            Statement statement=con.createStatement();
                ResultSet CountTopicrs=statement.executeQuery(Countsql);
                if (CountTopicrs.next())
                {
                    intCountTopic=CountTopicrs.getInt(1);//获取第一个字段的整型
                }
                //获取总页数。
                intPageCount = (intCountTopic+intPageSize-1)/intPageSize;
                //如果当前页大于总页数,则当前页等于总页数。//=最后一页
                if (intPage>intPageCount)
                {
                intPage=intPageCount;
                }
                //关闭总主题数的数据集。
                CountTopicrs.close();
                //获取执行分页的结果集。
                 Pagirs=statement.executeQuery(Pagisql);
                //System.out.print("翻页try");
            }//try
            catch(Exception e)
                {
                    System.out.println(e.getMessage());
                    Pagirs=null;
                    //System.out.print("翻页catch");                //return null;
                } //catch
                finally{
                  conn.FreeConn();
                  //System.out.print("翻页释放"+con);
                  //System.out.print("翻页"+Pagirs);
                return Pagirs;
                }
    }//end querySql function.//获取记录总数。
    public int getCountTopic()
    {
    return intCountTopic;
    }//获取总页数。
    public int getPageCount()
    {
    return intPageCount;
    }//获取当前页数。
    public int getIntPage()
    {
    return intPage;
    }//设置分页参数
    public void setPfoot(String str)
    {
    this.str_parameter+=str;
    }//分页栏函数
              public String PageFooter() {
              String str = "";
              int next, prev;
              prev=intPage-1;
              next=intPage+1;
              str +="<font style='font-size: 9pt'>总计<font color='red'>"+getCountTopic()+"</font>条记录,"+"共<font  color='red'>"+getPageCount()+"</font>页";
              str +="当前第<font color='red'>"+getIntPage()+"</font>页&nbsp; &nbsp; ";//getIntPage()*intPageSize
              if(intPage>1)
              str += " <A href=" + HttpFile + "?pages=1"+str_parameter+">第一页</A> ";
              else str += " 第一页 ";          if(intPage>1)
              str += " <A href=" + HttpFile + "?pages=" + prev +str_parameter+ ">上一页</A> ";
              else str += " 上一页 ";          if(intPage<intPageCount)
              str += " <A href=" + HttpFile + "?pages=" + next +str_parameter+ ">下一页</A> ";
              else str += " 下一页 ";          if(intPageCount>1&&intPage!=intPageCount)
              str += " <A href=" + HttpFile + "?pages=" + intPageCount +str_parameter+ ">最后页</A>";
              else str += " 最后页 </font>";
              str +="  转到<select name='pages'>";
              for(int i=1;i<=getPageCount();i++)
              {
                if(getIntPage()==i)
                str += "  <option value='"+i+"' selected>"+i+"</option>";
                else  str += "  <option value='"+i+"' >"+i+"</option>";
              }
              str +="  </select>页";
              str +="  <input type='submit' name='Submit' value='跳转' class='button''>";
              return str;
              }public void closeConn()
    {
    //db.closeConn();
    }} //end.
      

  4.   

    谢谢回复...回复人: fanqingfeng(丰丰) ( ) 信誉:105  2004-10-21 10:55:00  得分: 0  
     
     
       不用这么麻烦吧
    ----------------------------------------------
    我也不想这么麻烦的...请看下这个帖子:
    http://community.csdn.net/Expert/topic/3461/3461840.xml?temp=.9056055
    所以才这么做的....----------------------------------------------
    这么问吧,比如我在servlet中得到了一个结果集,怎么做才能分页?(考虑数据量较大的情况!)
     
      

  5.   

    去具体字段的值得时候,用双重循环!这里我用的vector,你改成list,如下:
    Vector myVec=new Vector();
    HashMap columnData=null;
    for(int i=0;i<myVec.size();i++) {
             
              if(!columnData.isEmpty()) columnData.clear();
              columnData=(HashMap)myVec.get(i);          for(j=0;j<columnData.size();j++)
              {
                  String data=(String)columnData.get("字段名");
                  if(data==null) data="";
                  
              }
     }你在修改一下。
      

  6.   

    如果你用sqlserver数据库,直接用select * from table limit 0,10;这样可以取出来前11条记录
      

  7.   

    回复人: fanqingfeng(丰丰) ( ) 信誉:105  2004-10-21 11:18:00  得分: 0  
     
     
       其实分页的原理是这样的 
    加入数据库中有100条记录 你想分页 每页显示10条
    那么你选择第1页的话 就是将1-9的记录保存在结果集中
    同理 如果选择第5页的话 就是将 40-49的记录保存到结果集中
    将这个数据集显示出来 就是显示第5页的内容了所以数据量的大小不是真正的原因,而每页显示的数目才是决定数据处理显示的关键---------------------------------哦,那具体的做法呢?
     
     
      

  8.   

    to fanqingfeng(丰丰) 数据量大小当然是真正的原因你说的分页SQL:
    select top " + pagesize + " * where " ID<(select min(ID) from (select top " +
              pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比! 
      

  9.   

    回复人: lingyulizhi(凌宇立志) ( ) 信誉:98  2004-10-21 11:23:00  得分: 0  
     
     
       如果你用sqlserver数据库,直接用select * from table limit 0,10;这样可以取出来前11条记录
     
     
    ------------------------
    是SQLSERVER哦...记下了,但是结果集是怎么传到JSP页面的?也是放到session中么?
      

  10.   

    /*功能:接收参数组织SQL语句
       *str_table :分页显示的表名
       *str_where:分页的where条件
       *httpfile :具体jsp文件
       *pages :获取地址栏传过来的pages参数
       */
    public ResultSet setQuerysql(String strWhat,String str_table,String str_where, String strOrder,String httpfile,String pages)throws SQLException
    {
    刚才的代码中 使用这个就是了 这个是经具体需求改了一下 
    你可以稍做修改
    如我们使用的是
    turnPage A=new turnPage();
    A.setPage(10);//每页显示数目
    ResultSet B=A.setQuerysql("*","ABC","where a=1","order by id desc","asdc.jsp","2")//则显示第二页其中觉得多余的地方就是 传递 *  
    因为select * from ABC where a=1 order by id desc   代码运行是成功的 而且封装起来后使用很方便  
    由于我们对实际需要做了增加修改  所以会变得有点复杂 不过相信你明白代码意思的
     
      

  11.   

    to:回复人: lndlzcy(落日弓)
     to fanqingfeng(丰丰) 数据量大小当然是真正的原因你说的分页SQL:
    select top " + pagesize + " * where " ID<(select min(ID) from (select top " +
              pagesize * (page - 1) + " ID from "+table+" order by CNID desc) as c) order by ID desc";判断 ID<...这个条件耗费的时间当然和数据库大小成正比! 你上面的SQL语句不是科学的分页 :)
      

  12.   

    那么你的分页Sql如何生成的?你的strWhere我一直没找到那里赋值的
      

  13.   

    能把你的分页SQL打印出来看看吗?
      

  14.   

    丰丰,我现在在看你的分页,你的CONN能给我看一下吗?