sql >> Base de Datos >  >> RDS >> Sqlserver

Ejecute sp_msforeachdb en una aplicación Java

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 un ResultSet
  • 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()?