我们什么时候应该使用预准备语句而不是语句?

2022-09-01 11:27:38

我知道使用的好处,哪些是PreparedStatement

  • 查询由数据库服务器重写和编译
  • 防止 SQL 注入

但我想知道我们什么时候使用它而不是?Statement


答案 1
  1. 查询由数据库服务器重写和编译

    如果不使用预准备语句,则数据库服务器必须在每次运行语句时对其进行分析并计算执行计划。如果您发现您将多次运行同一语句(使用不同的参数),那么值得准备一次语句并重用该预准备语句。如果您正在查询数据库,那么这可能没有什么好处。

  2. 防止 SQL 注入

    这是您几乎总是想要的优势,因此每次都有理由使用。这是必须参数化查询的结果,但它确实使运行它变得更加安全。我唯一能想到的这不会有用的时候是,如果你允许临时数据库查询;如果您正在为应用程序创建原型并且它更快,或者查询不包含任何参数,则可以只使用 Statement 对象。PreparedStatement


答案 2

问问汤姆的意见

在 JDBC 中使用语句应 100% 本地化为用于 DDL(ALTER、CREATE、GRANT 等),因为这些是唯一不能接受 BIND 变量的语句类型。

PreparedStatements 或 CallableStatements 应用于所有其他类型的语句(DML、查询)。因为这些是接受绑定变量的语句类型。

这是一个事实,一个规则,一个法律- 到处使用准备好的陈述。几乎不用在任何地方使用语句。

他特别谈到了Oracle,但同样的原则也适用于任何缓存执行计划的数据库。

同时扩展和防止 SQL 注入攻击的数据库应用?缺点是什么?


推荐