Re: getUdateCount() vs. RETURNING clause
От | Oliver Jowett |
---|---|
Тема | Re: getUdateCount() vs. RETURNING clause |
Дата | |
Msg-id | 4B0D2014.3060703@opencloud.com обсуждение исходный текст |
Ответ на | Re: getUdateCount() vs. RETURNING clause (Thomas Kellerer <spam_eater@gmx.net>) |
Ответы |
Re: getUdateCount() vs. RETURNING clause
|
Список | 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
В списке pgsql-jdbc по дате отправления: