ステートメントがnoまたは複数を返すことができる場合 結果として、executeQuery
は使用しないでください 、ただしexecute()
代わりに、このメソッドはboolean
を返します 最初の結果のタイプを示します:
-
true
:結果はResultSet
-
false
:結果は更新カウントです
結果がtrue
の場合 、次にgetResultSet()
を使用します ResultSet
を取得するには それ以外の場合は、getUpdateCount()
更新カウントを取得します。更新カウントが-1
の場合 これ以上の結果がないことを意味します。更新回数も-1
になることに注意してください 現在の結果がResultSet
の場合 。 getResultSet()
であることも知っておくとよいでしょう。 結果がこれ以上ない場合、または結果が更新カウントである場合は、nullを返す必要があります。
さらに結果を取得したい場合は、getMoreResults()
を呼び出します。 (またはその兄弟がint
を受け入れる パラメータ)。 boolean
の戻り値 execute()
と同じ意味です 、したがってfalse
これ以上結果がないという意味ではありません!
getMoreResults()
の場合、これ以上の結果はありません。 falseを返し、getUpdateCount()
-1
を返します (Javadocにも記載されています)
基本的に、これは、すべての結果を正しく処理する場合は、次のようなことを行う必要があることを意味します。
boolean result = stmt.execute(...);
while(true)
if (result) {
ResultSet rs = stmt.getResultSet();
// Do something with resultset ...
} else {
int updateCount = stmt.getUpdateCount();
if (updateCount == -1) {
// no more results
break;
}
// Do something with update count ...
}
result = stmt.getMoreResults();
}
注:この回答の一部は、Java SQLに対する私の回答に基づいています:Statement.hasResultSet()?