2016-11-14 70 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?