2009-06-19 7 views
3

J'ai lancé findbugs sur notre base de code et il a souligné qu'il y a deux autres instructions qui doivent encore être fermées. Dans cette section du code, nous exécutons:Réutilisation d'un PreparedStatement

preparedStatement = connection.prepareStatement(query); 

pour 3 requêtes différentes, en réutilisant prepareStatement. Dans le bloc finalement, nous fermons la ressource:

finally{ 
    try{ 
     if (resultSet != null) 
     resultSet.close(); 
    } catch (Exception e) { 
     exceptionHandler.ignore(e); 
    } 
    try { 
     if (preparedStatement != null) 
     preparedStatement.close(); 
    } catch(Exception e) { 
     exceptionHandler.ignore(e); 
    } 

Si la déclaration soit fermée avant la prochaine Connection.prepareStatement (requête); ou est-ce que les findbugs sont prudents?

+2

Que vous ayez besoin ou non de la référence est sans conséquence. Lorsque vous appelez connection.prepareStatement (query), vous créez un prepareStatement dans cette connexion. Ceux-ci vont rester là jusqu'à ce que la connexion soit fermée. Lorsque vous touchez cela, vous ne faites que fermer l'instruction préparée par cette variable. Laisser 2 des 3 jusqu'à ce que la connexion soit fermée. En production, vous continuerez à fuir les connexions et éventuellement à manquer si vous ne supprimez pas Abandoned (tomcat) ou similaire. – Zach

+0

Merci pour l'explication! Ajouté les changements :) –

Répondre

8

Oui, l'instruction doit être fermée avant d'effectuer la connexion suivante.prepareStatement. Sinon, vous perdez votre référence à la précédente non-fermée (les déclarations de fuite aka). Enveloppez un try {} finally {} autour de chaque utilisation de la déclaration, en la fermant dans le final.

+0

Juste pour souligner également que tout en fermant la connexion devrait nettoyer les déclarations divulguées, mieux vaut fermer chacun individuellement. Si ce code était répété plusieurs fois dans une connexion ouverte, vous seriez à court de ressources (2 instructions à la fois =]) – MarquisDeMizzle

Questions connexes