Как правильно инициализировать и закрывать Statement?
Есть класс (SQLExecClass) который работает с БД в рамках прогона теста(-ов), в нём
метод (void execSQL(String sql)) который принимает на вход SQL строку, в конструктор класса передаётся объект класса-подключения к БД (DBConnector). В методе создаю Statement: Statement statement = DBConnector.getConnection().createStatement(). Нашёл в такую инфу:
Объекты Statement закрываются автоматически сборщиком мусора виртуальной машины Java. Тем не менее рекомендуется закрывать их явно после того, как работа с ними завершена
Я в классе теста создаю объект SQLExecClass и использую его за тест 5-15 раз. В связи с чем вопрос в каком месте лучше инициализировать Statement? В конструкторе класса или в методе? Когда стоит его закрывать в конце теста (если в конце теста, то надо сделать метод для закрытия в SQLExecClass?) или в методе после выполнения запроса, и стоит ли вообще его самому закрывать?
Ответы (2 шт):
Переменную надо использовать максимально близко к месту использования, это не касается статических переменных. Закрывая statment вы указываете gc на просьбу освободить память от объект на который не существует ссылки
Воспользовался ответом отсюда - использовал конструкцию try-with-resources:
try (Connection con = .......) {
......
try (Statement stmt = con.PrepareStatement(...)) {
......
try (ResultSet res = stmt.executeQuery()) {
.........
}
}
}