我正在使用例如 c3p0 和一些已定义的“maxStatements”来进行 preparedStatement 缓存。 这个缓存到底做了什么?它缓存什么样的数据。在什么级别(数据库,应用程序,..)? 从例子中理解它会很好。例如我有一个查询
select * from sometable where somecolumn=?
现在我在未缓存的准备好的语句中发送它。 现在我发送它并且它被缓存了。 有什么区别。第一种情况和第二种情况发生了什么。在第一种情况和第二种情况下发送到数据库服务器的是什么?
谢谢。
最佳答案
如果没有缓存,每次您从 Connection 请求一个 PreparedStatement 时,您都会得到一个新的 PreparedStatement。使用缓存,如果您提供相同的 SQL 字符串,您将经常获得完全相同的 PreparedStatement 类型的 Java 对象。如果您为 PreparedStatement 提供相同的 SQL,即使使用不同的参数,数据库通常可以重用执行计划等信息,但前提是您继续使用相同的 PreparedStatement。缓存不需要您的应用保留该 PreparedStatement 引用本身,从而使这变得更容易。
关于java - PreparedStatement 缓存 - 这是什么意思(它是如何工作的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12141036/