sql >> Databáze >  >> RDS >> Sqlserver

Spusťte sp_msforeachdb v aplikaci Java

Pokud příkaz může vrátit ne nebo násobek výsledky, neměli byste používat executeQuery , ale execute() místo toho tato metoda vrací boolean označující typ prvního výsledku:

  • true :výsledkem je ResultSet
  • false :výsledkem je počet aktualizací

Pokud je výsledek true , pak použijete getResultSet() k načtení ResultSet , jinak getUpdateCount() pro načtení počtu aktualizací. Pokud je počet aktualizací -1 znamená to, že již nejsou žádné výsledky. Všimněte si, že počet aktualizací bude také -1 když je aktuální výsledek ResultSet . Je také dobré vědět, že getResultSet() by měl vrátit hodnotu null, pokud nejsou k dispozici žádné další výsledky nebo pokud je výsledkem počet aktualizací.

Nyní, pokud chcete získat další výsledky, zavoláte getMoreResults() (nebo jeho bratr přijímající int parametr). Návratová hodnota boolean má stejný význam jako execute() , takže false neznamená, že již nejsou žádné další výsledky!

Pokud getMoreResults(), nejsou k dispozici žádné další výsledky vrátí hodnotu false a getUpdateCount() vrátí -1 (jak je také zdokumentováno v Javadoc)

V podstatě to znamená, že pokud chcete správně zpracovat všechny výsledky, musíte udělat něco jako níže:

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

POZNÁMKA:Část této odpovědi je založena na mé odpovědi na Java SQL:Statement.hasResultSet()?



  1. Databázový model pro rezervační systém autoškoly. Část 2

  2. execSQL() s UPDATE se neaktualizuje

  3. Přidat přihlášení k propojenému serveru na SQL Server (příklad T-SQL)

  4. Používejte relační databáze MySQL na Ubuntu 9.04 (Jaunty)