2016-04-14 10 views
0

ich die SPRING jdbcTemplate bin mit dem folgenden Code einige Daten aus meiner DB extrahieren mit:Jdbctemplate.query() Auswahlprozess einer Auswahlabfrage (Spring-Framework) mit

jdbctemplate.query(SELECT_SQL_QUERY, new RowCallbackHandler(){ 
    public void processRow(resultsetRS) throws SQLException{ 

    // Some operations here 
    } 
}); 

Wenn ich eine Auswahl Frage: Ich möchte wissen, ob diese Methode jdbctemplate.query()alles aus der Datenbank lädt, bevor die Daten verarbeitet werden oder Zeilen nacheinander geladen werden?

ich die Antwort brauche, weil ich bin mit zwei SELECT Abfragen und die zweite ist abhängig von den Ergebnissen der ersten (die Ergebnisse der Operationen an den ausgewählten Daten durchgeführt), bedeutet, dass, wenn der zweite Anruf lädt alles, bevor Sie Jede Behandlung wird nicht berücksichtigt, um die letzten Änderungen des ersten Anrufs zu berücksichtigen (weil ich Paralellismus in meinem Code verwende).

Antwort

1

Eine SELECT-Abfrage, die in JDBC ausgeführt wird, gibt alle Zeilen als eine Menge zurück.

Sie müssen die erste Abfrage ausführen und dann die zweite ausführen.

Dies ist die Quelle von (n + 1) Tod durch Latenz.

Eine bessere Lösung könnte es sein, es in einer Abfrage zu tun: Sie haben nur eine Netzwerk-Roundtrip auf diese Weise.

+0

gibt alle Zeilen als eine Menge zurück? auch wenn es sich um eine große Datenmenge handelt? 10 000 Reihe 100 000 Reihe ...? – FrankelStein

+0

Ja, so funktioniert SQL. Wenn Ihre Abfrage eine Million Zeilen zurückbringt, müssen Sie entweder mit ihnen umgehen oder eine intelligentere Abfrage schreiben. – duffymo

+0

Und was ist der n + 1 Tod durch Latenz? – FrankelStein

Verwandte Themen