JDBC中的PreparedStatement

时间:2013-11-04 06:43:46

标签: java database memory jdbc prepared-statement

当我们创建PreparedStatement的Object并执行像

这样的查询时
PreparedStatement stmt=con.prepareStatement("select * from emp");  
ResultSet rs=stmt.executeQuery(); 

如何重新编译Statement并预编译PreparedStatement?

何时使用存储内存位置数据的数据库中的PreparedStatement对象获取数据?

2 个答案:

答案 0 :(得分:2)

这取决于JDBC引擎。例如,MySQL的JDBC引擎通常不会创建服务器端预处理语句(请参阅MySQL docsthis SO question)。在这些情况下,PreparedStatement接口仅提供查询和参数之间的分隔,以便清晰和防止注入攻击;每次执行PreparedStatement时,它都会发送一个完整形成的SQL查询,然后MySQL服务器将对其进行解析,优化和执行。另一方面,一些系统(包括具有正确选项的MySQL - 见第二个链接)将使用“真实”预处理语句,这意味着它只会被解析和优化一次。

但实际上,这就像要求java.util.List的内存特性 - 它完全取决于实现,因此通常无法对接口进行有意义的回答。

答案 1 :(得分:1)

在JDBC中,总会发生三件事:

  1)Query creation.

  2)Query compilation.

  3)Query Execution.

在PreparedStatement的情况下,缓存存储器进入图像,因此不需要再次执行前两个步骤。 因此,只有在PreparedStatement与Statement相反的情况下才执行最后一步。