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 по дате отправления:

Предыдущее
От: Thomas Kellerer
Дата:
Сообщение: Re: getUdateCount() vs. RETURNING clause
Следующее
От: Thomas Kellerer
Дата:
Сообщение: Re: getUdateCount() vs. RETURNING clause