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 unResultSet
false
: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()?