Общий помощник для закрытия объектов JDBC

Настоятельно рекомендуется закрывать объекты JDBC (, соединения, операторы, наборы результатов ), когда они используются. Однако это приводит к множеству подобных кодов :

Connection conn = null;
Statement stm = null;
ResultSet res = null;
try {
  // Obtain connection / statement, get results, whatever...
} catch (SQLException e) {
  //...
} finally {
  if (res != null) { try { res.close(); } catch (SQLException ignore) {}}
  if (stm != null) { try { stm.close(); } catch (SQLException ignore) {}}
  if (conn != null) { try { conn.close(); } catch (SQLException ignore) {}}
}

. Теперь я подумал об уменьшении количества (повторяющегося )кода для закрытия объектов путем реализации вспомогательной функции. Он принимает объекты в качестве аргументов и пытается вызвать метод close()каждого объекта (, если у объекта есть такой метод ), используя отражение.

public void close(Object... objects) {
  for (Object object : objects) {
    for (Method method : object.getClass().getMethods()) {
      if (method.getName().equals("close")) {
        try {
          method.invoke(object);
        } catch (Exception e) {
          e.printStackTrace();
        }
        break; // break on the methods, go for the next object
      }
    }
  }
}

Блок finallyможно свести к этому:

} finally {
  close(res, stm, conn);
}

Это хорошо? Если нет, то каковы причины? Есть ли способ лучше?

6
задан riha 17 August 2012 в 15:19
поделиться