连续PreparedStatement良好做法

dee*_*see 4 java mysql jdbc

我正在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.您只是使用相同的变量.

这意味着您正在泄漏资源 - 第一次PreparedStatementResultSet- 每次调用此方法时,都不会被关闭.

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