连续PreparedStatement良好做法

我正在连续执行一些SELECT ,我想知道我应该如何处理PreparedStatement

示例代码:

 //Connection conn is already declared PreparedStatement pstmt = null; ResultSet rset = null; try { String sql = "SELECT ..."; pstmt = conn.prepareStatement(sql); pstmt.setString(1, someVar); rset = pstmt.executeQuery(); // Use ResultSet // A different query sql = "SELECT ..."; pstmt = conn.prepareStatement(sql); pstmt.setString(1, someVar); rset = pstmt.executeQuery(); // Use ResultSet } catch (SQLException e) { // Handle } finally { if (rset != null) rset.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } 

现在的问题是,在每次使用/使用不同的语句之后关闭PreparedStatement会更好吗,还是会完全没有区别?

我发现了一些关于重用PreparedStatement ,它总是有相同的查询,但我不确定使用不同的查询。

您没有使用相同的PreparedStatement ,工厂方法Connection.prepareStatement每次调用它时都会返回一个新实例。 PreparedStatement.executeQueryResultSet 。 您只是使用相同的变量。

这意味着每次调用此方法时,您都会泄漏资源 – 第一个PreparedStatementResultSet ,这些方法永远不会被关闭。

我的建议是使用Spring的JdbcTemplate ,它将为您正确处理这些数据库资源,并将代码分解为两种方法。