我得到了一个结果集result。根据需要调用了结果集的result.next()方法,处理完这个结果集之后还要对这个结果集进行另外的处理,也就是说还要调用一次result.next()方法。但这时此结果集的指针已经在最后一条记录了。怎样才能把指针再移动到第一条记录?我用了result.absolute(1)方法。提示“对只转发结果集的无效操作: absolute”错误。请问各位高手有什么好的办法吗?

解决方案 »

  1.   

    首先数据库要支持可滚动的结果集。另外,就是建立Statement时要加上参数Resultset.Type_SCORLL_INSENSITIVE
      

  2.   

    按缺省方法打开的ResultSet,其Cursor type 为forward only,也就是说只能向后执行next(),执行到最后一条记录就结束了。有连个方法解决:
    1。
    重新打开ResultSet,也就再一次执行executeQuery(),这时cursor又回到开头,可以再次执行next();
    2。
    指定按可滚动的方式打开ResultSet:
    Statement stmt = con.createStatement(
    ResultSet.TYPE_SCROLL_SENSITIVE,
      ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery(...);
    按上面的方式打开的ResultSet,Cursor type为scrollable,可以调用absolute()方法。
    从你说明的情况看,如果不是真正需要随机访问,采用第一种方法更合适。因为可滚动光标库相对于仅向前光标库来说,其开销是很大的。