2009-06-17 47 views
1

如何在java中過濾單引號?filerering /替換java中的單引號

我有一個搜索框,如果任何人輸入一個單引號,我會得到一個數據庫錯誤。

我不想在JavaScript或數據庫級別上使用它進行嵌入;我只想用Java來做。我怎樣才能做到這一點?

我不想完全失去它。有沒有其他方法?將\'工作取代報價?

回答

6

我認爲你從錯誤的角度來看問題。我強烈懷疑你是這樣構建你的SQL:

String sql = "SELECT * FROM TABLE WHERE USERID='" + userInput + "'"; 

或類似的東西。不要這樣做。改爲使用參數化查詢,並提供用戶輸入作爲參數。我曾經使用過的每個數據庫都知道如何處理這個數據庫,並且這是處理用戶輸入的方式。

如果你真的,真的只是想擺脫的報價,你可以使用:

text = text.replace("'", ""); 

...但是請不要。改爲使用參數化查詢。

+0

我不能這樣做,我使用休眠,所以我想要做的過濾在Java itsel ANDNOT的分貝水平 – user93796 2009-06-17 08:17:43

4

是,使用了PreparedStatement.setString():

String sql = "SELECT * FROM table WHERE USERID = ?"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setString(1, "O'Connor"); 
ResultSet rs = pstmt.executeQuery(); 

逃逸規則數據庫不同。例如在Oracle中,您可以複製使用apostrope以使其轉義。在MySQL中,它是反斜槓+撇號(我認爲)。

因此,無論userInput = userInput.replaceAll("'", "''");userInput = userInput.replaceAll("'", "\\'");