Home > Archive > PostgreSQL JDBC > April 2005 > Re: isLast() and empty ResultSet









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author Re: isLast() and empty ResultSet
Oliver Jowett

2005-04-21, 8:24 pm

Ruediger Herrmann wrote:
> Hello,
>
> I implemented an Iterator interface iterating over a ResultSet. Therefore
> I rely on isLast() to implement the Iterator#hasNext() method. This works
> fine unless the whole ResultSet is empty.
> For empty RresultSets, isLast always returns true.
> Stepping through the code I found the reason therefore. Line 544 of
> AbstractJdbc2ResultS
et says
> if (rows_size == 0)
> return false; // No rows.
> At least to me this is suspicious as I would return the opposite. Might that
> be a bug or is there any other reason to behave like this?


It's not a bug, AFAIK. isLast() returns true if the resultset is
positioned *on* the last row of the resultset. This means that if you
have a 5-row resultset, isLast() is true when the 5th row is the
currently active row (and you can retrieve data from that row at that
point).

For a 0-row resultset, we can never be on the last row as there are no
rows at all.

You could try something like this for your hasNext() condition:

rs.isBeforeFirst() || (rs.getRow() != 0 && !rs.isLast())

(note that isBeforeFirst() returns false on an empty resultset, per javadoc)

-O

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql
.org

Sponsored Links





Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive | Programming forum archive

Copyright 2008 droptable.com