sql >> Database >  >> RDS >> Sqlserver

Voer sp_msforeachdb uit in een Java-toepassing

Als een instructie nee of veelvoud kan opleveren resultaten, moet u executeQuery niet gebruiken , maar execute() in plaats daarvan retourneert deze methode een boolean geeft het type van het eerste resultaat aan:

  • true :resultaat is een ResultSet
  • false :resultaat is een updatetelling

Als het resultaat true is , dan gebruik je getResultSet() om de ResultSet . op te halen , anders getUpdateCount() om de updatetelling op te halen. Als het aantal updates -1 is het betekent dat er geen resultaten meer zijn. Merk op dat het aantal updates ook -1 . zal zijn wanneer het huidige resultaat een ResultSet . is . Het is ook goed om te weten dat getResultSet() zou null moeten retourneren als er geen resultaten meer zijn of als het resultaat een updatetelling is.

Als u nu meer resultaten wilt ophalen, roept u getMoreResults() . aan (of zijn broer accepteert een int parameter). De retourwaarde van boolean heeft dezelfde betekenis als die van execute() , dus false betekent niet dat er geen resultaten meer zijn!

Er zijn alleen geen resultaten meer als de getMoreResults() retourneert false en getUpdateCount() retourneert -1 (zoals ook gedocumenteerd in de Javadoc)

Dit betekent in wezen dat als u alle resultaten correct wilt verwerken, u iets als hieronder moet doen:

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

OPMERKING:een deel van dit antwoord is gebaseerd op mijn antwoord op Java SQL:Statement.hasResultSet()?



  1. best practices voor mysqldump:deel 1 – MySQL-vereisten

  2. Hoe String Case in PostgreSQL te converteren

  3. BETWEEN-clausule versus <=AND>=

  4. Een procedure maken in een pakket in Oracle