ステートメントが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()?