Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Execute sp_msforeachdb em um aplicativo Java


Se uma instrução puder retornar não ou vários resultados, você não deve usar executeQuery , mas execute() em vez disso, este método retorna um boolean indicando o tipo do primeiro resultado:
  • true :resultado é um ResultSet
  • false :resultado é uma contagem de atualização

Se o resultado for true , então você usa getResultSet() para recuperar o ResultSet , caso contrário getUpdateCount() para recuperar a contagem de atualização. Se a contagem de atualizações for -1 significa que não há mais resultados. Observe que a contagem de atualizações também será -1 quando o resultado atual é um ResultSet . Também é bom saber que getResultSet() deve retornar null se não houver mais resultados ou se o resultado for uma contagem de atualização.

Agora, se você quiser recuperar mais resultados, chame getMoreResults() (ou seu irmão aceitando um int parâmetro). O valor de retorno de boolean tem o mesmo significado de execute() , então false não significa que não há mais resultados!

Só não há mais resultados se o getMoreResults() retorna false e getUpdateCount() retorna -1 (como também documentado no Javadoc)

Essencialmente, isso significa que, se você deseja processar corretamente todos os resultados, precisa fazer algo como abaixo:
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 desta resposta é baseada na minha resposta para Java SQL:Statement.hasResultSet()?