Как установить параметры в автоматически закрываемых ресурсах, когда у результирующего набора есть параметры? - PullRequest
0 голосов
/ 15 февраля 2019

Как правильно установить соединение с ресурсами -> оператор -> набор результатов с параметрами.Если у меня есть

    try (Connection connection = dataSource.getConnection();
            PreparedStatement statement = connection.prepareStatement("select * from foo where bar = ?");
            ResultSet result = statement.executeQuery()) {
        while (result.next()) {
        }
    } catch (SQLException e) {
    }

, я не могу установить параметр внутри блока try.Тем не менее, я могу делать вещи во внешней функции, такой как PreparedStatement statement = getStatement(connection, parameter), но имеет ли это какие-либо побочные эффекты при автоматическом закрытии, или пробные ресурсы по-прежнему отслеживают все, даже если connection.createStatement происходит "внешне"?

1 Ответ

0 голосов
/ 15 февраля 2019

Вам нужно будет вложить try-with-resources.Например:

try (Connection connection = dataSource.getConnection();
     PreparedStatement statement = connection.prepareStatement("select * from foo where bar = ?");
    statement.setString(1, "baz);
    try (ResultSet result = statement.executeQuery()) {
        // etc
    }
}

Хорошо работающие драйверы JDBC автоматически закрывают операторы, когда закрывается соединение, и результирующие наборы, когда оператор закрывается, но лучше всегда программировать защиту и обеспечивать правильное закрытие ресурсов.

Try-with-resources не относится к JDBC.Что в основном делает попытка с ресурсами, так это прикрепление к блоку finally, который закрывает ресурсы в правильном порядке, вызывая их методы close().В результате, try-with-resources не имеет значения, откуда берется ресурс, если он реализует AutoCloseable.Это просто гарантирует, что close() вызывается для ресурса в конце блока.Поэтому все равно, если "connection.createStatement произойдет" внешне "" .Метод createStatement - это просто еще один метод, который возвращает ресурс, а try-with-resources касается только возвращаемого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...