我想知道它们有什么不同,什么时候使用Statement
、PreparedStatement
和CallableStatement
。
使用每种方法的最佳实践和典型场景是什么?
发布于 2011-12-04 05:33:50
语句vs PreparedStatement
SQL的性能可能会更好,但如果是dependent.
类似帖子:
Difference between Statement and PreparedStatement
CallableStatement跨所有数据库访问StoredProcedures的Java答案。
相似的帖子
CallableStatement vs Statement
对于PreparedStatement和Callable,您已经有了缓存,而且缓存本身也是一个很大的主题,您不会想要做所有这些事情,而是看看ehcache
您几乎总是应该更喜欢PreparedStatement而不是语句
如果你必须在StoredProcedure上操作,你只有一个选择CallableStatement。
发布于 2011-12-04 12:33:07
我建议您在传递参数时使用PreparedStatement,无论您是否要重用该语句。在实践中,我将PreparedStatement用于除过程调用之外的所有内容,并让DB和JDBC驱动程序决定缓存什么以及如何缓存。过程调用应该使用CallableStatement来处理缺乏一致的跨数据库过程调用语法的问题。
在PostgreSQL上,JDBC驱动程序在客户端缓存准备好的语句,直到达到一定的重用阈值。此时,将发出一个服务器端PREPARE语句,并使用该服务器端PREPARE语句及其缓存的计划进一步执行。这个可以有一些..。有趣的是。和意想不到的效果,因为PostgreSQL基于统计的查询规划器。如果您的表具有某些值分布(或由于缺少分析、错误的random_page_cost或太低的统计阈值而导致的糟糕统计数据),当规划器具有未知参数时,它可能会选择一个不同的较慢的查询计划,如果它知道您正在搜索的实际值,它就会选择这个参数。如果你在第5次(默认情况下)重复一条特定语句后遇到查询突然大幅减慢的情况,你可能会被这个问题所困扰,可以通过PgJDBC中的turning off server-side PREPARE来解决这个问题。正在进行的工作是通过检查特定参数是否与未知值情况有非常不同的统计数据来检测服务器中的这些问题情况,但AFAIK它还没有命中HEAD。另请参见this question。搜索pgsql-general邮件列表和stackOverflow以获取更多信息。
https://stackoverflow.com/questions/8371053
复制相似问题