From: | Oliver Jowett <oliver(at)opencloud(dot)com> |
---|---|
To: | Ruediger Herrmann <ruediger(dot)herrmann(at)gmx(dot)de> |
Cc: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Re: isLast() and empty ResultSet |
Date: | 2005-04-21 22:16:37 |
Message-ID: | 42682645.4030104@opencloud.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
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
> AbstractJdbc2ResultSet 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
From | Date | Subject | |
---|---|---|---|
Next Message | Dave Cramer | 2005-04-21 22:43:10 | Re: What Hibernate Object ID generator is recommanded for |
Previous Message | Oliver Jowett | 2005-04-21 22:14:34 | Re: What Hibernate Object ID generator is recommanded for |