Где закрыть java PreparedStatements и ResultSets? - PullRequest
34 голосов
/ 26 ноября 2008

Рассмотрим код:

PreparedStatement ps = null;
ResultSet rs = null;
try {
  ps = conn.createStatement(myQueryString);
  rs = ps.executeQuery();
  // process the results...
} catch (java.sql.SQLException e) {
  log.error("an error!", e);
  throw new MyAppException("I'm sorry. Your query did not work.");
} finally {
  ps.close();
  rs.close();
}

Выше не компилируется, потому что оба PreparedStatement.close() и ResultSet.close() выдают java.sql.SQLException. Так я могу добавить блок try / catch в предложение finally? Или переместить оператор close в предложение try? Или просто не удосужились позвонить близко?

Ответы [ 13 ]

0 голосов
/ 06 августа 2012

Фокус, наконец, предложение,

finally {
   try {
      rs.close();
      ps.close();
   } catch (Exception e) {
      // Do something
   }
}

Я думаю, вам нужно изменить 2 пункта.

Во-первых, используйте try & catch снова в fainlly предложении.

Во-вторых, сделайте rs.close () перед выполнением ps.close ().

fly1997@naver.com

0 голосов
/ 26 ноября 2008

Я использую это ..

finally
{
    if (ps != null) ps.close();
    if (rs != null) rs.close();
}
0 голосов
/ 26 ноября 2008

Не опускайте колл. Это может вызвать проблемы.

Я предпочитаю добавить блок try / catch к окончанию.

...