加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 用于关闭JDBC对象的通用助手

发布时间:2020-12-14 05:38:56 所属栏目:Java 来源:网络整理
导读:强烈建议在使用它们时关闭JDBC对象(连接,语句,结果集).但是,这会产生大量代码: Connection conn = null;Statement stm = null;ResultSet res = null;try { // Obtain connection / statement,get results,whatever...} catch (SQLException e) { // ...} fi
强烈建议在使用它们时关闭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);
}

这是一件好事吗?如果不是,原因是什么?有没有更好的办法?

解决方法

就个人而言,我不会在这种情况下使用反射,当有很多好的方法可以做到这一点而不需要它.以下是您可以做的几件事.

>使用Spring.Spring有一个JdbcTemplate对象,有助于减轻Jdbc编码的冗余.样板代码隐藏在JdbcTemplate的实现中,因此您可以自由地对您的应用程序执行重要操作.
>使用Java7.Java7提供了一种新的语言结构,可以更容易地关闭实现AutoClosable接口的对象.
>创建自己的库来处理样板代码.如果Spring对您的需求太重,您可以在一个基类中轻松完成所有关闭,Jdbc交互类可以从中扩展.你将不得不写一次,但它在大多数情况下都可以不在视线之内.

Java7方式看起来像这样:

try (
    Connection conn = getConnectionSomehow();
    Statement statement = getStatementFromConnSomehow(conn);
) {
    //use connection
    //use statement
} catch(SomeException ex) {
    //do something with exception
}//hey,check it out,conn and statement will be closed automatically! :)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读