如果我们关闭并重新打开准备好的语句,是否会重新计算查询计划?

时间:2012-02-02 07:10:04

标签: java database prepared-statement sql-execution-plan

需要了解其工作原理

我有以下代码

  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 个答案:

答案 0 :(得分:1)

这取决于您要定位的RDBMS。

SQL Server能够为语句"update Orders set productname = ? where Prod_Id = ?"缓存参数化查询计划,因此会有一个好处。然而,这是一个如此简单的查询,其好处可能会非常小。

您应该在您的特定情况下进行衡量(您的服务器是CPU绑定的,还是I / O绑定的?通常是后者)。

如你所知。使用PreparedStatement的真正好处是准备一次,然后使用不同的参数设置多次调用。