public boolean absolute( int row ) throws SQLException {
      if (row == 0 || getType() == ResultSet.TYPE_FORWARD_ONLY) {
         throw new SQLException(resBundle.handleGetObject("cachedrowsetimpl.absolute").toString());
      }

      if (row > 0) { // we are moving foward
         if (row > numRows) {
            // fell off the end
            afterLast();
            return false;
         } else {
            if (absolutePos <= 0)
               internalFirst();
         }
      } else { // we are moving backward
         if (cursorPos + row < 0) {
            // fell off the front
            beforeFirst();
            return false;
         } else {
            if (absolutePos >= 0)
               internalLast();
         }
      }

      // Now move towards the absolute row that we're looking for
      while (absolutePos != row) {
         if (absolutePos < row) {
            if (!internalNext())
               break;
         }
         else {
            if (!internalPrevious())
               break;
         }
      }

      notifyCursorMoved();

      if (isAfterLast() || isBeforeFirst()) {
         return false;
      } else {
         return true;
      }
   }
Moves this <code>StreamingRowSetImpl</code> object's cursor to the row number
specified.

<p>If the number is positive, the cursor moves to an absolute row with
respect to the beginning of the rowset.  The first row is row 1, the second
is row 2, and so on.  For example, the following command, in which
<code>crs</code> is a <code>StreamingRowSetImpl</code> object, moves the cursor
to the fourth row, starting from the beginning of the rowset.
<PRE><code>

   crs.absolute(4);

</code> </PRE>
<P>
If the number is negative, the cursor moves to an absolute row position
with respect to the end of the rowset.  For example, calling
<code>absolute(-1)</code> positions the cursor on the last row,
<code>absolute(-2)</code> moves it on the next-to-last row, and so on.
If the <code>StreamingRowSetImpl</code> object <code>crs</code> has five rows,
the following command moves the cursor to the fourth-to-last row, which
in the case of a  rowset with five rows, is also the second row, counting
from the beginning.
<PRE><code>

   crs.absolute(-4);

</code> </PRE>

If the number specified is larger than the number of rows, the cursor
will move to the position after the last row. If the number specified
would move the cursor one or more rows before the first row, the cursor
moves to the position before the first row.
<P>
Note: Calling <code>absolute(1)</code> is the same as calling the
method <code>first()</code>.  Calling <code>absolute(-1)</code> is the
same as calling <code>last()</code>.

@param row a positive number to indicate the row, starting row numbering from
       the first row, which is <code>1</code>; a negative number to indicate
       the row, starting row numbering from the last row, which is
       <code>-1</code>; it must not be <code>0</code>
@return <code>true</code> if the cursor is on the rowset; <code>false</code>
        otherwise
@throws SQLException if the given cursor position is <code>0</code> or the
           type of this rowset is <code>ResultSet.TYPE_FORWARD_ONLY</code>
src/main/java/org/replicadb/rowset/StreamingRowSetImpl.java