Est il toujours utile de fermer les ResultSet?

Résolu
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 - 1 mai 2008 à 14:30
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 - 1 mai 2008 à 16:34
J'ai certaines pages d'un servlet qui font appel à une succession de requetes SQL, je me demandais s'il est vraiment judicieux de fermer les ResultSet et de le mettre à null alors que je vais les réinitialiser un peu plus tard et ce 5,6 fois dans la page.
merci.

ma page ressemble à ca :

ResultSet rs=null;

rs=MySQL.Query(...ma requete SQL...)
while (rs.next()){
    [.... code ...]
}
rs. close();
rs=null;

  [.... code ...]

rs=MySQL.Query(...ma requete SQL...)

while (rs.next()){

    [.... code ...]

}

rs. close();

rs=null;

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 mai 2008 à 15:59
Salut,

Non justement ! Je me suis fait avoir dans un projet : arrivé au bout du projet, j'avais une grosse fuite mémoire, et je me suis rendu compte de cà : tout resultset ouvert doit obligatoirement être fermé ! Même si tu l'écrase par une nouvelle instance (ce qui, en y réfléchissant, est logique : comment Java pourrait savoir si le flux ouvert avec la base est toujours bon ou pas ? sachant que la connection est toujours ouverte !)

C'est le même problème avec n'importe quel type de flux, comme les fichiers par exemple !
______________________________________
DarK Sidious
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
1 mai 2008 à 14:35
Salut,

Il faut absolument les fermer, sinon tu auras droit à une jolie fuite mémoire !

Le garbage collector ne pourra pas libérer les ressources tant que les resultset seront ouverts !
______________________________________
DarK Sidious
0
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 1
1 mai 2008 à 15:04
ok en fin de page je comprends bien, mais en cours de page ?

j'ai un ResultSet  "rs" que je crée par un appel mysql

quand j'ai fini d'exploiter les données se déroulent qq lignes de codes puis de nouveau j'initialise ce meme ResultSet "rs" avec un autre appel MySQL

la memoire et les ressources du premier ne sont pas automatiquement libérées vu que l'objet est ecrasé par un second?
0
omcougar Messages postés 152 Date d'inscription mardi 4 mai 2004 Statut Membre Dernière intervention 8 octobre 2008 1
1 mai 2008 à 16:34
Merci beaucoup... je sentais bien arriver le coup fourré là dessus.
0
Rejoignez-nous