Bonjour à tous,

Je poste ici après avoir eu un débat avec les collègues concernant la fermeture de composants JDBC.

La méthode est la suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Déclaration des componsants JDBC
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
 
try{
   // Ouverure et utilisation des componsants JDBC
   ...
}
// A noter : pas de bloc catch, les exceptions seront remontées au niveau suppérieur
finally{
   try{rs.close();}catch(Exception e){}
   try{stmt.close();}catch(Exception e){}
   try{conn.close();}catch(Exception e){}
}
Les critiques remontées sont les suivantes :
1- On catch une exception générique et non un sous type SQLException
2- On ne log pas l'exception

Mon avis : si une exception à lieu durant la fermeture des composants, c'est qu'en principe une exception a déja été levée dans le try{} et donc elle sera catchée au niveau supérieur. La logger ne sert donc à rien. Et de toute façon si le close() plante et que la connexion a été fermée (ex:coupure réseau) avant l'entrée dans le bloc finally, de toute façon le commit a déja eu lieu et cela ne pose aucun problème.

Qu'en pensez-vous ? Comment avez-vous l'habitude de procéder pour fermer vos composants JDBC ? Est-ce que vous trouvez cette méthode "propre" ou pas ?