1.getRow()
2.absolute( int row )

解决方案 »

  1.   

    ResultSet.getRow() 得到全部纪录的数量
      

  2.   

    rs.last();
    int rowCount = rs.getRow()+1;//获得全部记录数量
    /***************************
    rs.absolute( int row );//定位
      

  3.   

    开始我也是这么做的
    但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀?
      

  4.   

    仔细想想,其实不停的用next也不见得就比直接指定到一行慢,resultSet内部要指定到某一行也需要一行一行的next,只不过是在内部进行,你看不见而已,
      

  5.   

    To: whyxx(我也是新手) 
    实际上我以前就是用next()循环来定位第n页面的记录,不过后来用absolute()确实快了很多,用
    next()的时间长短取决于循环次数,但absolute()和记录的位置无关,任何位置只须同样的很短的时间
      

  6.   

    resultSet内部要指定到某一行也需要一行一行的next???不是吧,这怎么可能呢。开始我也是这么做的
    但是我在用rs.last()和rs.first()的时候,编译的时候没有问题,但是运行的时候就抛出异常:对只转发结果集的无效操作!这是为什么呀?
    你的程序,异常信息,异常时的数据库状况
      

  7.   

    我用的数据库是oracle,上面我已经我错误告诉大家了,捕获的异常SQLException就是“对只转发结果集的无效操作”,但用rs.next就没有问题。
      

  8.   

    ...    
        Connection conn = null;
        Statement  stmt = null;
        ResultSet  rset = null;
        try{
          int count = 0;
          int loopCount=0;
          conn = DbConnect.getInstance().getConnection();
          stmt = conn.createStatement();
          rset = stmt.executeQuery(sql);      if(rset.next()){
            boolean isLast=rset.last();
            count=rset.getRow()+1;
          }
          else{
            count=0;
          }
          rset.first();
          rset.absolute(index);
          ......
        }
        catch(Exception e){
          System.out.println("the Exception is : "+e.getMessage());
        }
        finally{
          try {
            if(conn != null) conn.close();
            if(rset != null) rset.close();
            if(stmt != null) stmt.close();
          } catch (SQLException ex) {}
        }
      

  9.   

    执行rset.last()和rset.first()就会出错
      

  10.   

    你是在进行分页操作吧.stmt = conn.createStatement();这句话有问题,需要加2个参数,使你可以last()操作后可以first(),就是指针可以回头的意思,具体你看看网上有例子
    还有就是不推荐使用查询所有记录然后用last(),然后用getrow(),因为last()所用时间完全和rs.next()循环到最后一条记录所用时间一样推荐:
      1.先建立一个查询所有记录的sql ,比如select count(*) ...
        然后取出记录数.这样当你记录数大(5000条记录以上就可以明显看出差别了)的时候就可以节省很多时间了.
      2.再建立你需要的查询,然后用absolute(int n)(其实它所用的时间完全和你用循环结合next()一样)跳到你需要的记录.
      

  11.   

    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY )
      

  12.   

    连接对象的参数如下设置
    DBConnect dbc=new DBConnect(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
      

  13.   

    super_zzw(之支吾) 你确定absolute(int n)(其实它所用的时间完全和你用循环结合next()一样)跳到你需要的记录.???能不能告诉我什么资料上有介绍?我认为应该不会的才对。rs内部应该完全可以直接跳到某一条记录才对。
      

  14.   

    再用next之前,先将纪录移到第一条之前ds.beforeFirst();
      

  15.   

    乱码的话编码转化一下比如new String( 取得结果.getBytes(现在的编码), 你需要的编码 )
      

  16.   

    to bluesmile979(笑着) 我作过对100000条记录的测试
    用absolute()和next()+循环时间完全一样!!!!  数据库是oracle817,你不信可以自己做测试!