是否存在差异以及使用哪种更好的做法:String.format()
并手动插入值或PreparedStatement
并将值解析为占位符(代码的大小是多少)?
答案 0 :(得分:4)
作为一般规则,永远不要使用纯字符串格式,其中PreparedStatement
可以使用。后者了解您的数据库SQL语法。并且会比你更好地“屏蔽”每个特殊字符。
如果不遵守该规则,您的代码中会出现SQL Injection的高风险。
答案 1 :(得分:2)
有一个根本区别:PreparedStatement
会做出任何需要,以便您提供给它的值(通过.set*()
方法)对数据库“中立”(或者更确切地说) ,“JDBC引擎”)。
请注意,PreparedStatement
是接口。因此,当为这个或那个数据库引擎使用JDBC驱动程序时,它将能够根据所述引擎采取不同的行动。
请勿使用String.format()
。它的作用是完全不同的! String.format()
无法阻止SQL注入攻击; PreparedStatement
可以,除非它的实现者真的做了真的糟糕的工作。