Как правильно инициализировать и закрывать Statement?

Есть класс (SQLExecClass) который работает с БД в рамках прогона теста(-ов), в нём метод (void execSQL(String sql)) который принимает на вход SQL строку, в конструктор класса передаётся объект класса-подключения к БД (DBConnector). В методе создаю Statement: Statement statement = DBConnector.getConnection().createStatement(). Нашёл в такую инфу:

Объекты Statement закрываются автоматически сборщиком мусора виртуальной машины Java. Тем не менее рекомендуется закрывать их явно после того, как работа с ними завершена

Я в классе теста создаю объект SQLExecClass и использую его за тест 5-15 раз. В связи с чем вопрос в каком месте лучше инициализировать Statement? В конструкторе класса или в методе? Когда стоит его закрывать в конце теста (если в конце теста, то надо сделать метод для закрытия в SQLExecClass?) или в методе после выполнения запроса, и стоит ли вообще его самому закрывать?


Ответы (2 шт):

Автор решения: Dersu Uzala

Переменную надо использовать максимально близко к месту использования, это не касается статических переменных. Закрывая statment вы указываете gc на просьбу освободить память от объект на который не существует ссылки

→ Ссылка
Автор решения: Денис Кондратов

Воспользовался ответом отсюда - использовал конструкцию try-with-resources:

try (Connection con = .......) {
  ......
  try (Statement stmt = con.PrepareStatement(...)) {
    ......
    try (ResultSet res = stmt.executeQuery()) {
      .........
    }
  }
}
→ Ссылка