0

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

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

4

4 回答 4

2

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

为什么 PreparedStatement 优于 Statement

于 2013-06-26T09:30:28.070 回答
2

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

  • 当 PreparedStatement 结果进入在数据库上预编译并重用的查询时,您的查询执行速度很快。
  • PreparedStatement,您的查询是动态的。这意味着,您只定义一次查询,并使用不同的参数再次重复使用相同的查询。字符串连接也可以实现它,但它的粗糙方式是这样做的。引用此链接

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

  • 当您使用 PreparedStatement 时,您可以防止SQL注入攻击。在 Prepared 语句中,您不使用字符串连接来添加运行时参数,而是在编译查询中显式设置参数,传递的参数由 PreparedStatement 的 JDBC Driver 自动转义。
于 2013-06-26T09:36:29.127 回答
1

APreparedStatement是简单Statement的,因为它为您提供了一些针对 SQL 注入的安全性。

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

你也不能在预期String的地方插入一些。Number

于 2013-06-26T09:29:01.917 回答
0

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

于 2013-06-26T09:34:57.580 回答