我应该使用Prepared Statement插入一行吗?

时间:2013-06-26 09:07:38

标签: java jdbc prepared-statement

我刚刚发现我们的代码中有些地方使用Prepared Statement,即使我们总是处理向表中插入一行。

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

4 个答案:

答案 0 :(得分:2)

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

Why PreparedStatement is preferable over Statement

答案 1 :(得分:2)

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

  • 您将执行快速作为PreparedStatement结果查询到正在数据库中预编译并重新使用的查询。
  • PreparedStatement,您的查询是动态的。意思是,您只定义一次查询,并使用不同的参数再次重复使用它。字符串连接也实现了它,但它的原始方式做到了这一点。引用this link
  

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

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

答案 2 :(得分:1)

PreparedStatement可以对一个简单的Statement进行预处理,因为它可以抵御一些针对SQL注入的安全性。

PreparedStatement中,检查每个参数的类型并自动转义。这意味着使用String插入'PreparedStatement一起保存,而在不使用PreparedStatement时必须自行转义特殊字符。

此外,您无法在预期String的位置插入一些Number

答案 3 :(得分:0)

如果你的代码只插入一行,它可能会多次调用,在这种情况下PreparedStatement应该更快。对于Statement,它还需要在执行之前进行编译,因此它几乎不会更快