1

有什么区别吗?有什么更好的做法:String.format()手动插入值或PreparedStatement解析值到占位符(代码的大小更多)?

4

2 回答 2

4

作为一般规则,永远不要在可以使用的地方使用纯字符串格式。PreparedStatement后者了解您的数据库 SQL 语法。并且会比你更好地“屏蔽”每个特殊字符。

不遵守该规则将导致代码中存在SQL 注入的高风险。

请参阅PreparedStatement 是否避免 SQL 注入?

于 2013-06-24T16:39:26.223 回答
2

有一个根本的区别:aPreparedStatement将尽其所能,以便您(通过方法)提供给它的值.set*()对数据库(或者更确切地说,“JDBC 引擎”)来说是“中立的”。

注意PreparedStatement是一个接口。因此,当为这个或那个数据库引擎使用 JDBC 驱动程序时,它将能够根据所述引擎采取不同的行动。

不要String.format()为此使用。它的作用是完全不同的!String.format()无法阻止 SQL 注入攻击;PreparedStatement可以,除非它的实现者做得非常非常糟糕。

于 2013-06-24T16:48:50.327 回答