java如果我们关闭并重新打开一个准备好的语句,查询计划会被重新计算吗?
需要了解一下它是如何工作的吗
我有以下代码
public static void updateOrdersPrepared(int productId , String productName){
Connection con = getConnection();
try {
pstmt = con.prepareStatement
("update Orders set productname = ? where Prod_Id = ?");
pstmt.setInt(2, productId);
pstmt.setString(1, productName);
pstmt.executeUpdate();
pstmt.close();
con.close();
} catch(SQLException ex) {
System.err.println("SQLException: " + ex.getMessage());
}
JOptionPane.showMessageDialog(null,"Data Updated into Orders Table");
}
现在,如果这个方法被调用了N次,那么准备好的语句的查询计划将被计算N次还是只计算一次
在这种情况下,使用事先准备好的陈述是否真的有好处
# 1 楼答案
这将取决于您针对的RDBMS
SQL Server能够缓存语句
"update Orders set productname = ? where Prod_Id = ?"
的参数化查询计划,因此这将带来好处。然而,这是一个如此简单的问题,其好处可能非常小您应该在特定情况下进行测量(您的服务器是CPU受限还是I/O受限?通常是后者)
正如你所知。使用PreparedStatement的真正优势在于准备一次,然后使用不同的参数集多次调用