как написать Java закрыть соединение? - PullRequest
3 голосов
/ 08 апреля 2019

У меня есть более 2 классов, которые реализовали соединение отдельно, используя try-catch, однако, когда я попытался закрыть соединение в основном, оно не сработало, поскольку оно имеет область действия в try-catch. У меня вопрос, как мне закрыть соединение при использовании блока try-catch?

Вот мой код для одного из моих классов

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 ]

4 голосов
/ 08 апреля 2019

Это необходимо сделать в блоке finally, чтобы он выполнялся независимо от того, была ли операция успешной или нет (было сгенерировано исключение):

connection.close();

Или проще - используйте try-with-resources . Тогда пишем:

try (Connection connection = DriverManager.getConnection(f, "coffee", "1234")) {
    ...
}

Тогда вам не придется беспокоиться о закрытии ресурса.

3 голосов
/ 08 апреля 2019

Начиная с версии Java 1.7, вы можете использовать try-with-resources следующим образом:

    String f = ...
    try (Connection connection = DriverManager.getConnection(f, "coffee", "1234")) {
        ...
    } catch (SQLException ex) {
        ...
    }

и он будет автоматически закрыт Java.

1 голос
/ 08 апреля 2019

Безопасный шаблон в Java - закрывать ваши ResultSet, Statement и Connection (в таком порядке) в блоке finally, когда вы закончите с ними, что-то вроде этого:

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 */}
    }
}

Для получения дополнительной информации проверьте эту ссылку

...