字符串格式(或类似函数)或PreparedStatement

时间:2013-06-24 16:36:00

标签: java mysql

是否存在差异以及使用哪种更好的做法:String.format()并手动插入值或PreparedStatement并将值解析为占位符(代码的大小是多少)?

2 个答案:

答案 0 :(得分:4)

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

如果不遵守该规则,您的代码中会出现SQL Injection的高风险。

请参阅Does the preparedStatement avoid SQL injection?

答案 1 :(得分:2)

有一个根本区别:PreparedStatement会做出任何需要,以便您提供给它的值(通过.set*()方法)对数据库“中立”(或者更确切地说) ,“JDBC引擎”)。

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

请勿使用String.format()。它的作用是完全不同的! String.format()无法阻止SQL注入攻击; PreparedStatement可以,除非它的实现者真的做了真的糟糕的工作。