Si una instrucción no puede devolver nada o múltiples resultados, no debe usar executeQuery , pero execute() en cambio, este método devuelve un boolean indicando el tipo del primer resultado:
true:el resultado es unResultSetfalse:el resultado es un recuento de actualizaciones
Si el resultado es true , luego usas getResultSet() para recuperar el ResultSet , de lo contrario getUpdateCount() para recuperar el recuento de actualizaciones. Si el número de actualizaciones es -1 significa que no hay más resultados. Tenga en cuenta que el recuento de actualizaciones también será -1 cuando el resultado actual es un ResultSet . También es bueno saber que getResultSet() debería devolver nulo si no hay más resultados o si el resultado es un recuento de actualizaciones.
Ahora, si desea recuperar más resultados, llame a getMoreResults() (o su hermano aceptando un int parámetro). El valor de retorno de boolean tiene el mismo significado que el de execute() , entonces false no significa que no haya más resultados!
Solo no hay más resultados si getMoreResults() devuelve falso y getUpdateCount() devuelve -1 (como también se documenta en el Javadoc)
Básicamente, esto significa que si desea procesar correctamente todos los resultados, debe hacer algo como lo siguiente:
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();
}
NOTA:Parte de esta respuesta se basa en mi respuesta a Java SQL:Statement.hasResultSet()?