关于Java准备语句的问题

时间:2009-05-06 09:29:58

标签: database jdbc

我们在Java中有一个Prepared Statement,我们听说它与Statement中的不同之处在于每次使用时都不需要编译这个准备好的语句。

我的问题是这个编译语句存储在哪里?在使用它的客户端代码中,还是由数据库存储?

为什么DB存储编译语句以及是否存在多长时间?

1 个答案:

答案 0 :(得分:4)

数据库有一个查询缓存,这意味着当您执行查询时,数据库会缓存已解析/已编译的查询以及可能的查询计划以消除将来的计算。

准备好的语句通常首先在应用程序级别进行缓存,其中应用程序容器负责管理语句缓存。大多数应用程序容器都有控制预准备语句缓存的选项(例如:glassfish)。

正如您所看到的here,主要区别在于您说:使用预准备语句,应用程序可以降低反复编译同一语句的成本。作为旁注,对于大多数app容器,语句必须完全相同(包括空格)才能正确重用,因此在使用手写查询时要小心。