Как закрыть statemant с помощью try-with-resorces?

Рейтинг: -1Ответов: 1Опубликовано: 06.03.2023
public void dropUsersTable() {
    String SQL = "DROP TABLE IF EXISTS user";
    try (Connection connection = getConnection()) {
        Statement statement = connection.createStatement();
        statement.executeUpdate(SQL);
        statement.close();
        System.out.println("Table delete");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

Ответы

▲ 2Принят

В конструкции try-with-resources можно открывать несколько ресурсов, перечисляя их через точку с запятой:

public void dropUsersTable() {
    String SQL = "DROP TABLE IF EXISTS user";
    try (Connection connection = getConnection();
         Statement statement = connection.createStatement())
    {
        statement.executeUpdate(SQL);
        System.out.println("Table delete");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

В приведённом выше коде закроется и statement, и connection, что абсолютно корректно.

Теоретически, переменную connection можно не объявлять:

public void dropUsersTable() {
    String SQL = "DROP TABLE IF EXISTS user";
    try (Statement statement = getConnection().createStatement())
    {
        statement.executeUpdate(SQL);
        System.out.println("Table delete");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

Однако в таком случае statement хоть и закроется, но останется открытым соединение к базе данных, что очень нежелательно. Поэтому лучше использовать первый вариант кода.