在最终确定最佳实践时关闭连接?

时间:2012-05-13 20:05:59

标签: java database-connection finalizer

  

可能重复:
  Why would you ever implement finalize()?

我看到了一些带有以下代码的java文件:

public void finalize() {
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
        }
    }
}
  • Connection方法最佳做法中关闭finalize
  • 是否足以关闭Connection或是否需要关闭其他对象,例如PreparedStatement

4 个答案:

答案 0 :(得分:8)

从Java 7开始,关闭资源的最佳做法是使用try-with-resource:

http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

答案 1 :(得分:5)

不,这不是"最佳实践",甚至"可通行的练习"。 你不能保证什么时候调用终结器,所以它不会起作用。

相反,您应该将资源限定为块,如下所示:

try {
  acquire resource
}
finally {
  if (resource was acquired)
    release it
}

答案 2 :(得分:1)

不,如果有的话,终结者不太可能及时被召唤。明确而且肯定地清理你的资源。

/* Acquire resource. */
try {
  /* Use resource. */
}
finally {
  /* Release resource. */
}

答案 3 :(得分:-2)

获取Connection对象后,使用它来执行放置在try块中的PreparedStatement / Statement / CallableStatement,然后放置房屋清洁工作,如关闭法令和conn。

例如:

 try{

    Connection conn = DriverManager.getConnection(url,username,password);

    PreparedStatement pStat = conn.prepareStatement("Drop table info");

    pStat.executeUpdate();
      }
       catch(Exception ex){
        }

   finally(){

     pStat.close();
     conn.close();
 }