我正在SELECT连续执行几个,我想知道我应该如何处理PreparedStatements.
示例代码:
//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();
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,PreparedStatement在每次使用/使用不同的语句之后关闭s 会更好吗,还是会完全没有区别?
我发现了一些关于重用a的信息PreparedStatement总是有相同的查询,但我不确定使用不同的查询.
Nic*_*olt 11
您没有使用相同PreparedStatement的工厂方法,Connection.prepareStatement每次调用它时都会返回一个新实例. PreparedStatement.executeQuery正在做同样的事情ResultSet.您只是使用相同的变量.
这意味着您正在泄漏资源 - 第一次PreparedStatement和ResultSet- 每次调用此方法时,都不会被关闭.
我的建议是使用Spring JdbcTemplate来正确处理这些数据库资源,并将代码分解为两种方法.