首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JDBC -语句、PreparedStatement、CallableStatement和缓存

JDBC -语句、PreparedStatement、CallableStatement和缓存
EN

Stack Overflow用户
提问于 2011-12-04 05:09:02
回答 2查看 10.2K关注 0票数 8

我想知道它们有什么不同,什么时候使用StatementPreparedStatementCallableStatement

使用每种方法的最佳实践和典型场景是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-04 05:33:50

语句vs PreparedStatement

SQL的性能可能会更好,但如果是dependent.

  • With
  1. ,你就可以避免PreparedStatement注入。使用preparedStatement by setInt,setString where as语句进行类型检查您只需将其附加到主SQL.

类似帖子:

Difference between Statement and PreparedStatement

CallableStatement跨所有数据库访问StoredProcedures的Java答案。

相似的帖子

CallableStatement vs Statement

对于PreparedStatement和Callable,您已经有了缓存,而且缓存本身也是一个很大的主题,您不会想要做所有这些事情,而是看看ehcache

您几乎总是应该更喜欢PreparedStatement而不是语句

如果你必须在StoredProcedure上操作,你只有一个选择CallableStatement。

票数 7
EN

Stack Overflow用户

发布于 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以获取更多信息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8371053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档