PreparedStatement的缓存 - 这是什么意思(它是如何工作)(PreparedStat

2019-07-31 05:16发布

我使用的具有确定“maxStatements”为preparedStatement时缓存例如C3P0。 这是什么缓存真的? 它缓存什么样的数据。 在什么样的水平(DB,应用程序,..)? 这将是很好的例子,从了解它。 比如我有一个查询

SELECT * FROM sometable其中somecolumn =?

现在,我在未缓存准备好的声明中发送。 现在我要送它,它被缓存。 什么区别。 发生了什么事在第一种情况下,并在第二位。 什么是发送到DB服务器在第一种情况,并在第二?

谢谢。

Answer 1:

如果没有缓存,你会每次索要一个连接时获得一个新的预处理。 随着缓存,如果你提供相同的SQL字符串,你会经常得到类型的PreparedStatement完全相同的Java对象。 如果您提供相同的SQL到一个PreparedStatement,即使有不同的参数,往往数据库可以重复使用,如执行计划的信息,但前提是你继续使用相同的PreparedStatement。 缓存也可以简化,不要求你的应用程序坚持到PreparedStatement的引用本身。



Answer 2:

约翰·瓦特的答案是非常好的。

请注意,是可以提供,因为语句缓存是透明的没有示例代码:使用它看起来酷似代码不编码。 你只需打开语句缓存,在C3P0,通过maxStatements和或maxStatementsPerConnection设定为正值。

从语句缓存的任何性能优势数据库/ JDBC驱动程序依赖。 要查看是否语句缓存帮助,请尝试使用语句缓存关闭,然后用maxStatementsPerConnection设置为你的应用程序使用多次准备好的语句的查询数量第一配置您的应用程序。 对于某些应用/数据库/驱动器,你会看到一个显著的好处。 对于其他人,你将不会看到任何物质利益。



文章来源: PreparedStatement caching - what does it mean (how does it work)