3
votes

comment écrire java fermer la connexion?

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);
 }                                       


1 commentaires

Pourquoi ne le fermez-vous pas dans le bloc try ?


3 Réponses :


4
votes

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.


0 commentaires

3
votes

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.


0 commentaires

1
votes

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


0 commentaires