2016-11-14 73 views
0

我知道使用Statement和纯String是不好的编程,而且我需要使用preparedStatement来避免SQL Injections。 但是,我可以创建字符串,然后将该字符串置于preparedStatement,或者是这样使用Statement?将字符串放入prepared语句

例如:

String sql = "SELECT * FROM users WHERE user_ID = ?"; 

preparedStatement = connection.prepareStatement(sql); 

preparedStatement.setLong(1, userId); 
+0

目前还不清楚你问什么,我不知道如何代码显示了你的问题。 –

回答

2

您可以使用ps.setString,它是不一样的使用原始String查询。 PreparedStatement保证在将字符发送到数据库之前转义字符,并且您的查询应该不受sql注入攻击的影响(无论如何,这个String)。

0

的想法是使用作为输入的参数到您的PreparedStatement一样,是不是建立你的SQL命令,在这种情况下,以下的作品就好了:

PreparedStatement ps = connection.prepareStatement(sql); 
ps.setString(`INPUT PARAMETER`); 

如果不遵守这对于SQL注入攻击仍然是容易受到束缚的,因为你最终会串联字符串。

好有关这个主题的读取是这些链接:

  1. How can prepared statements protect from SQL injection attacks?
  2. http://javarevisited.blogspot.in/2012/03/why-use-preparedstatement-in-java-jdbc.html
  3. How does a PreparedStatement avoid or prevent SQL injection?