sql >> Databasteknik >  >> RDS >> Sqlserver

Kör sp_msforeachdb i en Java-applikation

Om ett uttalande kan returnera no eller multiple resultat bör du inte använda executeQuery , men execute() istället returnerar denna metod en boolean anger typen av det första resultatet:

  • true :resultatet är en ResultSet
  • false :resultatet är ett antal uppdateringar

Om resultatet är true , sedan använder du getResultSet() för att hämta ResultSet , annars getUpdateCount() för att hämta uppdateringsantalet. Om uppdateringsantalet är -1 det betyder att det inte finns fler resultat. Observera att uppdateringsantalet också kommer att vara -1 när det aktuella resultatet är en ResultSet . Det är också bra att veta att getResultSet() ska returnera null om det inte finns fler resultat eller om resultatet är ett antal uppdateringar.

Om du nu vill hämta fler resultat, anropar du getMoreResults() (eller dess bror som accepterar en int parameter). Returvärdet för boolean har samma betydelse som execute() , alltså false betyder inte att det inte finns fler resultat!

Det finns bara inga fler resultat om getMoreResults() returnerar false och getUpdateCount() returnerar -1 (som också dokumenterats i Javadoc)

Detta betyder i huvudsak att om du vill bearbeta alla resultat korrekt måste du göra något som nedan:

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

OBS:En del av det här svaret är baserat på mitt svar på Java SQL:Statement.hasResultSet()?



  1. Skapa tabell i procedur

  2. Använder Hibernates ScrollableResults för att långsamt läsa 90 miljoner poster

  3. SUM() Funktion i MySQL

  4. SQLiteOpenHelper:metoden onCreate() anropas inte på fysisk enhet