2013-01-15 76 views
3

如何使用java中的單引號生成查詢語句。當我搜索用單引號的字顯示它沒什麼記錄顯示在搜索中處理單引號

,比如我有一個名字D'科斯塔我怎麼會搜索該用java

getSearchByUserSQL.append("SELECT * FROM SID_USERS "); 
    getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like ? 
      OR lower(LASTNAME) like ?"); 

回答

1

你需要逃避'\'。這裏\是一個轉義字符。
您可以使用String.replace'替換爲\'

EscapeSequence在Java中:

\ b /* \u0008: backspace BS */ 
\ t /* \u0009: horizontal tab HT */ 
\ n /* \u000a: linefeed LF */ 
\ f /* \u000c: form feed FF */ 
\ r /* \u000d: carriage return CR */ 
\ " /* \u0022: double quote " */ 
\ ' /* \u0027: single quote ' */ 
\ \ /* \u005c: backslash \ */ 

Doc Link

+0

你能解釋一下如何在java中使用''''''在你想使用''''的地方使用''''' – jackyesind

+0

。 – xyz

1

在Java中,你需要使用反斜線單引號。對於Oracle,您需要用單引號轉義單引號。所以\'\'應該做的伎倆,所以在PL/SQL,它變成'',最後變成'

getSearchByUserSQL.append("SELECT * FROM SID_USERS "); 
getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like \'PETE\'\'S\' OR lower(LASTNAME) like \'REPEAT\'\'S\'"); 

會發現「pete's」和「repeat's」作爲名字。只需將PL/SQL字符串中的單引號用作文字即可。它被稱爲「字符串初始」

4

而你可以嘗試手動轉義所有字符串它的很多工作和它的困難(不同的數據庫可能有不同的轉義規則)。作爲進一步的證據,你不應該這樣做 - 看看公用事業朗 - 他們放棄了對2. *和3. *之間的SQL轉義支持。

因此,如果您將查詢變爲PreparedStatement,則可以使用PreparedStatement.setParameter(int, String)插入動態值而不是佔位符,並且JDBC驅動程序將爲您執行所有轉義操作。所以:

String myQuery = "SELECT * FROM SID_USERS WHERE lower(FIRSTNAME) like :1 OR lower(LASTNAME) like :2"; 
PreparesStatement ps = connection.prepareStatement(myQuery); 
ps.setParameter(1,"Mickey"); 
ps.setParameter(2,"Mouse"); 
results = ps.execute(); 
+0

該鏈接不對我開放 – jackyesind

+0

@jackyesind - 爲我工作的很好。其基本上只是j2se 6 javadoc – radai

+0

+1。但關於評論,如果它是6,它應該是Java SE 6,而不是J2SE 6(http://en.wikipedia.org/wiki/Java_Platform,_Standard_Edition#Nomenclature.2C_standards_and_specifications)。 2不見了:) –