Java 关闭连接是否符合最佳做法?

Java 关闭连接是否符合最佳做法?,java,database-connection,finalizer,Java,Database Connection,Finalizer,可能重复: 我看到一些java文件包含以下代码: public void finalize() { if (conn != null) { try { conn.close(); } catch (SQLException e) { } } } 是否在finalize方法最佳实践中关闭连接 关闭连接就足够了吗还是还需要关闭其他对象,如PreparedStatement 不,这不是“最佳实践”,甚至不是“

可能重复:

我看到一些java文件包含以下代码:

public void finalize() {
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) {
        }
    }
}
  • 是否在
    finalize
    方法最佳实践中关闭
    连接
  • 关闭
    连接就足够了吗
    还是还需要关闭其他对象,如
    PreparedStatement
不,这不是“最佳实践”,甚至不是“可接受的实践”。 您无法保证何时调用终结器,因此它将无法工作

相反,您应该将资源范围扩大到一个块,如下所示:

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

根据Java 7,关闭资源的最佳实践是使用try with resource:


否,如果有可能,不太可能及时调用终结器。明确且肯定地清理您的资源

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

获取连接对象后,使用它执行放置在try块中的PreparedStatement/Statement/CallableStatement,然后放置房屋清理作业,如关闭station和conn

例如:


根据-最佳实践是“避免终结器”,您可能会发现它很有用;这不会编译。在本例中,调用了两个try-finally块,一个嵌套在另一个中。
 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();
 }