Explizites Schließen von Iterator-Objekten nach Verwendung nur eines Teils eines Abfrageergebnisses

Wenn Sie nicht alle in einem Iterator enthaltenen Zeilen eines Abfrageergebnisses verwenden, müssen Sie diesen Iterator explizit schließen, wenn Sie ihn nicht mehr benötigen.

Die Rückgabe eines Abfrageergebnisses in Form eines anderen Java™-Typs als Iterator bewirkt, dass beim Ausführen der Abfrage das gesamte Ergebnis verbraucht und zum Füllen des zurückgegebenen Objekts verwendet wird. Bei einem zurückgegebenen Iterator hingegen wird das Ergebnis Zeile für Zeile verbraucht, entsprechend den von Ihrer Anwendung ausgeführten next()-Operationen.

Wenn Sie unter Verwendung eines Iterators das vollständige Abfrageergebnis lesen, wird der Iterator von pureQuery geschlossen, nachdem die letzte Zeile gelesen wurde. Durch Schließen eines Iterators werden Datenbankressourcen freigegeben, die zum Erstellen des Iterators benötigt wurden.

Wenn jedoch nicht das vollständige Abfrageergebnis in einem Iterator verbraucht wird, müssen Sie den Iterator schließen.

Beispiel: Zum Schließen eines Iterators mit dem Namen 'customers' würden Sie den folgenden Code verwenden, durch den Iterator in ResultIterator umgewandelt und anschließend die Methode ResultIterator.close() aufgerufen wird:

((ResultIterator) customers).close();

pureQuery-Methoden, von denen ein Iterator zurückgegeben wird, geben immer den Typ java.util.Iterator zurück, der von pureQuery als com.ibm.pdq.runtime.ResultIterator erstellt wird. ResultIterator ermöglicht Anwendungen, das einem Iterator zugrunde liegende ResultSet zu schließen und Ressourcen freizugeben, die ResultSet im Client oder im Server zugeordnet sind.

Die Schnittstelle ResultIterator ist wie folgt definiert:

package com.ibm.pdq.runtime;

import java.util.Iterator;

public interface ResultIterator<T> extends Iterator<T>
{
   // alle diesem Iterator zugeordneten Ressourcen freigeben
   public void close();
}

Feedback