From: | Oliver Jowett <oliver(at)opencloud(dot)com> |
---|---|
To: | Thomas Kellerer <spam_eater(at)gmx(dot)net> |
Cc: | pgsql-jdbc(at)postgresql(dot)org |
Subject: | Re: getUdateCount() vs. RETURNING clause |
Date: | 2009-11-25 12:16:20 |
Message-ID: | 4B0D2014.3060703@opencloud.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-jdbc |
Thomas Kellerer wrote:
> Oliver Jowett, 25.11.2009 12:13:
>>
>> You've done some selective editing there. The javadoc I referred to is
>> this (from the Java 6 javadoc):
>>
>> getResultSet():
>>
>> Retrieves the current result as a ResultSet object. This method should
>> be called only once per result.
>
> Correct, once per *result* not per statement. If the statement returns
> more than one result, I should be allowed to call it multiple time.
That's right, but you need a call to getMoreResults() to step through
the results between calls, as I suggested in my original response.
> I think the base of my (mis)understanding is that the term "current"
> lead me to believe that the "stack" of results a statement can hold,
> could look like this:
>
> resultSet
> update count = 3
> update count = 2
> resultSet
> reslutSet
Yes, you can have that. You step through the results by calling
getMoreResults(). At any particular point, the current result is either
a resultset or an update count, but never both.
> So if I create a loop using the condition stated in the Javadocs the
> program flow would be as follows:
>
> 1) stmt.execute() returns true, so I call getResultSet()
> 2) getMoreResults() returns false, but getUpdateCount() returns 3 ==> go on
> 3) getMoreResults() returns false, but getUpdateCount() returns 2 ==> go on
> 4) getMoreResults() returns true, so getResultSet() returns a result set
> ==> go on
> 5) getMoreResults() returns true, so getResultSet() returns a result set
> ==> go on
> 6) getMoreResults() returns false, getUpdateCount() returns -1 ==>
> everything was processed.
Yes, this is correct. It will look something like this:
boolean hasResultSet = stmt.execute();
int updateCount = stmt.getUpdateCount();
while (hasResultSet || updateCount != -1) {
if (hasResultSet) {
ResultSet rs = stmt.getResultSet();
// This result is a resultset, process rs.
} else {
// This result is an update count, process updateCount.
}
hasResultSet = stmt.getMoreResults();
updateCount = stmt.getUpdateCount();
}
-O
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Kellerer | 2009-11-25 12:30:17 | Re: getUdateCount() vs. RETURNING clause |
Previous Message | Thomas Kellerer | 2009-11-25 11:53:17 | Re: getUdateCount() vs. RETURNING clause |