J'ai plus de 2 classes qui ont implémenté la connexion séparément en utilisant try-catch, mais quand j'ai essayé de fermer la connexion dans le main, cela n'a pas fonctionné car il a une portée dans le try-catch. Ma question est de savoir comment fermer la connexion en utilisant le bloc try-catch?
Voici mon code pour l'une de mes classes
String query="INSERT INTO branch (branch_Num , Street, Nieghbourhood,city) VALUES (?, ?,?, ?)"; try{ PreparedStatement ps; String f="jdbc:derby://localhost:1527/coffeeZone"; connection = DriverManager.getConnection(f, "coffee", "1234"); ps=connection.prepareStatement(query); ps.setString(1, bno); ps.setString(2, strt); ps.setString(3, nbh); ps.setString(4, ci); if (ps.executeUpdate()>0){ JOptionPane.showMessageDialog(null, "Complete! a new branch is added !"); }else { JOptionPane.showMessageDialog(null, ""); } } catch (SQLException ex) { JOptionPane.showMessageDialog(null,ex); }
3 Réponses :
Vous devez le faire dans le bloc finally
, afin qu'il soit exécuté peu importe si l'opération a réussi ou non (une exception a été levée):
try (Connection connection = DriverManager.getConnection(f, "coffee", "1234")) { ... }
Ou plus simple - utilisez try-with-resources . Ensuite, écrivez:
connection.close();
Vous n'aurez plus à vous soucier de la fermeture de la ressource.
Depuis la version java 1.7, vous pouvez utiliser try-with-resources comme suit:
String f = ... try (Connection connection = DriverManager.getConnection(f, "coffee", "1234")) { ... } catch (SQLException ex) { ... }
et il sera automatiquement fermé par java.
Le modèle sûr en Java consiste à fermer votre ResultSet
, Statement
et Connection
(dans cet ordre) dans un enfin
bloquer lorsque vous en avez terminé avec eux, quelque chose comme ça:
Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // Do stuff ... } catch (SQLException ex) { // Exception handling stuff ... } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { /* ignored */} } if (ps != null) { try { ps.close(); } catch (SQLException e) { /* ignored */} } if (conn != null) { try { conn.close(); } catch (SQLException e) { /* ignored */} } }
Pour plus d'informations, consultez ce lien
Pourquoi ne le fermez-vous pas dans le bloc
try
?