Повторное использование PreparedStatement - PullRequest
3 голосов
/ 19 июня 2009

Я запустил findbugs в нашей кодовой базе и указал, что есть еще два оператора, которые еще нужно закрыть В этом разделе кода мы запускаем:

preparedStatement = connection.prepareStatement(query);

для 3 разных запросов, с повторным использованием подготовленного состояния. В блоке finally мы закрываем ресурс:

finally{
   try{
      if (resultSet != null) 
         resultSet.close();
   } catch (Exception e) {
      exceptionHandler.ignore(e);
   }
   try {
      if (preparedStatement != null) 
         preparedStatement.close();
   } catch(Exception e) {
      exceptionHandler.ignore(e);
   }

Должен ли оператор быть закрыт до следующего connection.prepareStatement (query); или эти находки очень осторожны?

1 Ответ

8 голосов
/ 19 июня 2009

Да, оператор должен быть закрыт перед выполнением следующего connection.prepareStatement. В противном случае вы теряете свою ссылку на незакрытый предыдущий (он же утечка утверждений). Оберните try {} finally {} вокруг каждого использования оператора, закрыв его в конце finally.

...