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?