我知道使用Statement和plain String是错误的编程,我需要使用preparedStatement来避免SQL注入。 但我可以创建字符串,然后将String放入preparedStatement,或者与使用Statement?
相同例如:
String sql = "SELECT * FROM users WHERE user_ID = ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setLong(1, userId);
答案 0 :(得分:2)
您可以使用ps.setString
,这与使用原始String
查询不同。 PreparedStatement
保证在将字符发送到数据库之前转义字符,并且您的查询应该不受sql注入攻击(无论如何都来自String
)。
答案 1 :(得分:0)
我们的想法是使用作为输入的参数,而不是构建SQL命令,而不是构建SQL命令,在这种情况下,以下工作正常:
PreparedStatement
如果你不遵守这一点,你仍然会对SQL注入攻击造成伤害,因为你最终会连接字符串。
关于这个主题的好读物是这些链接: