ibatis中有一个处理分页的方法,为什么当ResultSet为TYPE_FORWARD_ONLY 时不能直接用absolute? na 
  private void handleResults(RequestScope request, ResultSet rs, int skipResults, int maxResults, RowHandlerCallback callback) throws SQLException {
    try {
      request.setResultSet(rs);
      ResultMap resultMap = request.getResultMap();
      if (resultMap != null) {
        // Skip Results
        if (rs.getType() != ResultSet.TYPE_FORWARD_ONLY) {
          if (skipResults > 0) {
            rs.absolute(skipResults);
          }
        } else {
          for (int i = 0; i < skipResults; i++) {
            if (!rs.next()) {
              return;
            }
          }
        }        // Get Results
        int resultsFetched = 0;
        while ((maxResults == SqlExecutor.NO_MAXIMUM_RESULTS || resultsFetched < maxResults) && rs.next()) {
          Object[] columnValues = resultMap.resolveSubMap(request, rs).getResults(request, rs);
          callback.handleResultObject(request, columnValues, rs);
          resultsFetched++;
        }
      }
    } finally {
      request.setResultSet(null);
    }
  }

解决方案 »

  1.   

    TYPE_FORWARD_ONLY
    该常量指示指针只能向前移动的 ResultSet 对象的类型。
      

  2.   

    我是想知道用TYPE_FORWARD_ONLY,为什么resultset不能用absolute()方法,.而其他类型的就可以用absolute这个方法定位呢?
      

  3.   

    TYPE_FORWARD_ONLY 代表游标只能向前移动   所以不能用absolute()方法来随便移动游标
      

  4.   

    没原因,就是不行用absolute方法时,游标必须回到起始位置再移动
    你都FORWARD ONLY了,游标怎么回起始位置?
      

  5.   

    absolute()方法可以定位到任何一行。为什么不行呢?
    看例子:
    当前在第20行,如果你 rs.absolute(10);那么就是倒退10行了,这样的话还是FORWARD ONLY吗?既然确定了是TYPE_FORWARD_ONLY,就只能rs.next();