PreparedStatement与Connection的“关闭”之间的关系?

时间:2012-05-09 21:57:36

标签: java database prepared-statement

Javadoc说.close()的{​​{1}}说它是..

  

立即释放此Statement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。发布通常是好习惯   资源一旦完成就可以避免捆绑   数据库资源。

     

在已关闭的Statement对象上调用close方法无效。

     

注意:当Statement对象关闭时,它的当前ResultSet对象(如果存在)也将关闭。

考虑以下情况

PreparedStatement

在此示例中, MyConnector databaseConnector = DBManager.instance().getConnector(); Connection con = databaseConnector.getConnection(); // returns java.sql.Connection PreparedStatement pstmt = null; try { pstmt = con.prepareStatement("some query"); ... } finally { if (pstmt != null) pstmt.close(); } 也会关闭pstmt.close()

3 个答案:

答案 0 :(得分:12)

关闭Statement 不会关闭Connection。但是,关闭Connection 关闭Statement

这样想:

  • 连接 - >创建并自动关闭 - >声明
  • 声明 - >创建并自动关闭 - >结果集

关闭Connection会自动关闭其中包含的Statement任何ResultSet

但是,如果可能的话,最好还是手动关闭所有三个(ResultSet后跟Statement后跟Connection)。

答案 1 :(得分:2)

  

注意:当 Statement 对象关闭时,其当前的 ResultSet [但不是Connection]对象(如果存在)也会关闭。

它不会关闭连接,只关闭结果集对象。

答案 2 :(得分:0)

如果您使用的是Java 7和 try-with-resources ,则无需担心关闭连接或任何StatementResultSet。< / p>

try (Connection conn = databaseConnector.getConnection();
     PreparedStatement pstmt = conn.prepareStatement("some query")) {
    ...
} catch (Exception e) {
    ...
}