我用while(rs.next())取完ResultSet里的值之后 这个ResultSet是不是就为空了 我要想在这之后继续使用 怎么把ResultSet的指针再指向第一行之前?

解决方案 »

  1.   

    在创建Statement时可以指定参数Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE); 可以指定ResultSet可以重新定位 
      

  2.   

    1)先在 DatabaseMetaData 类的方法boolean supportsResultSetType(int type)和方法boolean supportsResultSetConcurrency(int type,  int concurrency)判断当前驱动支不支持滚动结果集或可更新结果集
    2)一些解释
                                        
    TYPE_FORWARD_ONLY 不可滚动 
    TYPE_SCROLL_INSENSITIVE 可滚动,但对于此次查询后的数据库相关表的更新不敏感(推荐 )
    TYPE_SCROLL_SENSITIVE 可滚动且敏感
    CONCUR_READ_ONLY ResultSet中的内容是只读的 (推荐)
    CONCUR_UPDATABLE  可被更新回数据库 
    3)所以一般是这样
    Statement stat = conn.createStatement(
       ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
      然后可以当读到最后之后 while (rs.previous())
         或rs.beforeFirst();while(rs.next())
      

  3.   

    要避免反复控制Resultset,只从它读出一次到你本地的对象中,然后本地操作这个对象来处理。
      

  4.   

    若问   难道不能rs.beforeFirst()? 我记得用完了 还是可以回去的啊
      

  5.   

    要回退的话需要要在实例的时候给定参数,具体参数google下。
      

  6.   

    jdbc默认的ResultSet只能是只进只读的。
      

  7.   

    +1
    JDBC 2.0新特性就支持结果集滚动操作了TYPE_FORWARD_ONLY:
    该常量指示指针只能向前移动的 ResultSet 对象的类型。
    TYPE_SCROLL_SENSITIVE:
    该常量指示可滚动并且通常受其他的更改影响的 ResultSet 对象的类型。
    CONCUR_UPDATABLE:
    该常量指示可以更新的 ResultSet 对象的并发模式。
    绝对定位:boolean absolute(int row)将游标移动到指定位置。
    相对定位:void afterLast()将游标向后移动一位。
    void beforeFirst() 。将游标向前移动一位。
    boolean first()将游标移动到结果集最前
    boolean last()将游标移动到结果集末尾。 不过LZ为什么要继续使用当前结果集呢?这个结果集不会和数据库进行实时更新,很容易出现脏数据,
      

  8.   

    在创建Statement时可以指定参数Statement stmt =con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);  可以指定ResultSet可以重新定位 
      

  9.   

    既然取出ResultSet里的值了,保存起来,以后再用时就没必要再从ResultSet取了
      

  10.   

    lz可以查下JavaAPI,可以使用可滚动的结果集,MySQL和Oracle都是支持的
      

  11.   

    本帖最后由 c_hua6280 于 2010-12-20 11:01:58 编辑
      

  12.   

    保存到自己的Vector里面,想怎么搞就怎么搞