在一次调用中关闭Connection,PreparedStatement和ResultSet

时间:2014-06-26 21:46:44

标签: java sql postgresql jdbc connection

关闭我的连接资源有什么问题吗?我似乎仍然在postgres运行中有空闲连接。

public void doSomething(){
  Connection con = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  try{
    con = getConnection();
    ps = con.prepareStatement("sql here");
    ....
    rs = ps.executeQuery();
    ...
   } catch(Exceptions stuff){
   } finally {
     closeAll(con,ps,rs);
   }
}
public void closeAll(Connection con, PreparedStatement ps, ResultSet rs){
  try{
        if(rs != null){
            rs.close();
        }
        if(ps != null){
            ps.close();
        }
        if(con != null){
            con.close();
        }
    } catch(SQLException e){
        ....
    }
}

1 个答案:

答案 0 :(得分:1)

练习最佳实践

是的,他们关闭连接的方式是一个问题。

假设,关闭ResultSet对象时发生异常,其余的东西不会被关闭

其次,假设一切顺利,你仍然持有你没有使用的其他连接(等),这增加了JVM,数据库,内存管理器等的负担

建议在JAVA 7中使用带有“资源”功能的“try(){”,或者如果您使用JAVA 6,则在不再需要时关闭它们。