【问题标题】:Should I use Prepared Statement for inserting one row?我应该使用 Prepared Statement 插入一行吗?
【发布时间】:2013-06-23 08:16:51
【问题描述】:

我刚刚发现我们的代码中有一些地方使用了准备好的语句,即使我们总是处理向表中插入一行。

我想知道在仅插入一行时使用 Prepared Statement 是否有一些开销值得修改此代码以使用 Statement。

【问题讨论】:

标签: java jdbc prepared-statement


【解决方案1】:

在安全方面,Prepared Statements 专门用于防止 SQL 注入攻击。关于效率,它在很大程度上取决于您正在处理的语句的性质。您可能还会发现这个其他答案很有趣:

Why PreparedStatement is preferable over Statement

【讨论】:

    【解决方案2】:

    当您使用 PreparedStement 时,不仅查询执行速度更快,还有其他优势。

    • 您将快速执行作为 PreparedStatement 结果查询到在数据库上预编译并重复使用的查询中。
    • PreparedStatement,您的查询是动态的。这意味着,您只定义一次查询,然后使用不同的参数再次重复使用相同的查询。字符串连接也可以实现它,但它的粗糙方式是这样做的。引用this link

    要记住的重要一点是永远不要构造 SQL 语句 使用未经检查的输入值的字符串连接。创建的 通过 java.sql.Statement 类的动态查询导致 SQL 注射。

    • 当您使用 PreparedStatement 时,您 prevent the SQL injection attacks。在 Prepared 语句中,您不使用字符串连接来添加运行时参数,而是在编译后的查询中显式设置参数,并且 传递的参数将由 PreparedStatement 的 JDBC 驱动程序自动转义

    【讨论】:

      【解决方案3】:

      即使您的代码只插入一行,它也可能被多次调用,在这种情况下,PreparedStatement 应该更快。至于Statement,它也需要在执行前编译,所以它几乎没有任何更快的速度

      【讨论】:

        【解决方案4】:

        PreparedStatement 优先于简单的Statement,因为它可以为您提供一些防止 SQL 注入的安全性。

        PreparedStatement 中,每个参数都会检查其类型并自动转义。这意味着插入带有'String 将使用PreparedStatement 保存,而在不使用PreparedStatement 时您必须自己转义特殊字符。

        此外,您不能在需要 Number 的地方插入一些 String

        【讨论】:

          猜你喜欢
          • 2011-09-27
          • 2014-10-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多