Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Exécuter sp_msforeachdb dans une application Java

Si une instruction peut renvoyer non ou plusieurs résultats, vous ne devez pas utiliser executeQuery , mais execute() à la place, cette méthode renvoie un boolean indiquant le type du premier résultat :

  • true :le résultat est un ResultSet
  • false  :le résultat est un nombre de mises à jour

Si le résultat est true , alors vous utilisez getResultSet() pour récupérer le ResultSet , sinon getUpdateCount() pour récupérer le nombre de mises à jour. Si le nombre de mises à jour est -1 cela signifie qu'il n'y a plus de résultats. Notez que le nombre de mises à jour sera également -1 lorsque le résultat courant est un ResultSet . Il est également bon de savoir que getResultSet() doit renvoyer null s'il n'y a plus de résultats ou si le résultat est un nombre de mises à jour.

Maintenant, si vous voulez récupérer plus de résultats, vous appelez getMoreResults() (ou son frère acceptant un int paramètre). La valeur de retour de boolean a la même signification que celle de execute() , donc false ne signifie pas qu'il n'y a plus de résultats !

Il n'y a plus de résultats uniquement si getMoreResults() renvoie faux et getUpdateCount() renvoie -1 (comme également documenté dans le Javadoc)

Cela signifie essentiellement que si vous voulez traiter correctement tous les résultats, vous devez faire quelque chose comme ci-dessous :

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();
}

REMARQUE :Une partie de cette réponse est basée sur ma réponse à Java SQL :Statement.hasResultSet() ?