Fermeture explicite des objets Iterator après l'utilisation d'une partie du résultat d'une requête

Si vous n'utilisez pas toutes les lignes d'un résultat de requête qui se trouvent dans un objet Iterator, vous devez fermer explicitement cet Iterator lorsque vous avez terminé de l'utiliser.

Le renvoi d'un résultat de requête comme tout type Java autre que Iterator provoque l'utilisation de l'ensemble du résultat pour remplir l'objet renvoyé. Toutefois, un objet Iterator renvoyé utilise le résultat une ligne à la fois à mesure que votre application effectue chaque opération next()

Si vous utilisez un objet Iterator pour lire l'ensemble du résultat d'une requête, pureQuery ferme Iterator après avoir lu la dernière ligne. La fermeture d'un Iterator libère des ressources de base de données qui ont été nécessaires à la génération de l'objet Iterator.

Toutefois, si l'ensemble du résultat de la requête présent dans un Iterator n'est pas utilisé, vous devez fermer explicitement l'Iterator.

Par exemple, pour fermer un objet Iterator nommé customers, vous utiliseriez le code suivant, qui utilise l'Iterator pour un ResultIterator, puis appelle la méthode ResultIterator.close() :

((ResultIterator) customers).close();

Les méthodes pureQuery qui renvoient un Iterator renvoient toujours le type java.util.Iterator, que pureQuery construit comme com.ibm.pdq.runtime.ResultIterator. ResultIterator fournit des applications ainsi que les moyens de fermer explicitement le ResultSet sous-jacent d'un Iterator et de libérer les éventuelles ressources associées au ResultSet dans le client ou sur le serveur.

L'interface ResultIterator est définie comme suit :

package com.ibm.pdq.runtime;

import java.util.Iterator;

public interface ResultIterator<T> extends Iterator<T>
{
   // libère toute ressources associée à cet Iterator
   public void close();
}

Commentaires