The problem is: relative(1)/relative(-1) can't both be identical to next()/previous() and throw and exception if there is no current row. I think there's an inconsistency here (In the Javadoc and in the tutorial, while the spec has no "current row"-requirement in ch. 14.2.2).
>>>>>>>>>>>> Shreyas Kaushik (JIRA) wrote (2005-05-25 10:41:55): > [ > http://issues.apache.org/jira/browse/DERBY-276?page=comments#action_66254 ] > > Shreyas Kaushik commented on DERBY-276: > --------------------------------------- > > Javadoc for J2SE 5.0 says... > > > relative > > boolean relative(int rows) > throws SQLException > > Moves the cursor a relative number of rows, either positive or negative. > Attempting to move beyond the first/last row in the result set positions the > cursor before/after the the first/last row. Calling relative(0) is valid, but > does not change the cursor position. > > Note: Calling the method relative(1) is identical to calling the method > next() and calling the method relative(-1) is identical to calling the method > previous(). > > Parameters: > rows - an int specifying the number of rows to move from the current > row; a positive number moves the cursor forward; a negative number moves the > cursor backward > Returns: > true if the cursor is on a row; false otherwise > Throws: > SQLException - if a database access error occurs, there is no current > row, or the result set type is TYPE_FORWARD_ONLY > Since: > 1.2 > > > > > ResultSet.relative(int row) cannot be called when the cursor is not > > positioned on a row. > > ---------------------------------------------------------------------------------------- > > > > Key: DERBY-276 > > URL: http://issues.apache.org/jira/browse/DERBY-276 > > Project: Derby > > Type: Improvement > > Components: JDBC > > Reporter: Bernt M. Johnsen > > Assignee: Bernt M. Johnsen > > Priority: Minor > > > > > If the cursor is not positioned on a row, calling ResultSet.relative() > > causes the following exception: > > Exception in thread "main" ERROR X0X87: ResultSet.relative(int row) cannot > > be called when the cursor is not positioned on a row. > > at > > org.apache.derby.iapi.error.StandardException.newException(StandardException.java:301) > > at > > org.apache.derby.impl.sql.execute.ScrollInsensitiveResultSet.getRelativeRow(ScrollInsensitiveResultSet.java:336) > > at > > org.apache.derby.impl.jdbc.EmbedResultSet.movePosition(EmbedResultSet.java:366) > > at > > org.apache.derby.impl.jdbc.EmbedResultSet.relative(EmbedResultSet.java:1840) > > However, The 1.4.2 Javadoc says: > > Note: Calling the method relative(1) is identical to calling the method > > next() and calling the method relative(-1) is identical to calling the > > method previous(). (This is confirmed by the JDBC 3.0 spec, ch. 14.2.2) > > Since next() is valid, so should rs.relative(1) (and all other arguments, > > since a too large value will position the > > cursor after the last row, and a too low value will position it before the > > first). > > -- > This message is automatically generated by JIRA. > - > If you think it was sent incorrectly contact one of the administrators: > http://issues.apache.org/jira/secure/Administrators.jspa > - > For more information on JIRA, see: > http://www.atlassian.com/software/jira > -- Bernt Marius Johnsen, Database Technology Group, Sun Microsystems, Trondheim, Norway
