如何使用java中的單引號生成查詢語句。當我搜索用單引號的字顯示它沒什麼記錄顯示在搜索中處理單引號
,比如我有一個名字D'科斯塔我怎麼會搜索該用java
getSearchByUserSQL.append("SELECT * FROM SID_USERS ");
getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like ?
OR lower(LASTNAME) like ?");
如何使用java中的單引號生成查詢語句。當我搜索用單引號的字顯示它沒什麼記錄顯示在搜索中處理單引號
,比如我有一個名字D'科斯塔我怎麼會搜索該用java
getSearchByUserSQL.append("SELECT * FROM SID_USERS ");
getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like ?
OR lower(LASTNAME) like ?");
你需要逃避'
與\'
。這裏\
是一個轉義字符。
您可以使用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 \ */
在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字符串中的單引號用作文字即可。它被稱爲「字符串初始」
而你可以嘗試手動轉義所有字符串它的很多工作和它的困難(不同的數據庫可能有不同的轉義規則)。作爲進一步的證據,你不應該這樣做 - 看看公用事業朗 - 他們放棄了對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();
該鏈接不對我開放 – jackyesind
@jackyesind - 爲我工作的很好。其基本上只是j2se 6 javadoc – radai
+1。但關於評論,如果它是6,它應該是Java SE 6,而不是J2SE 6(http://en.wikipedia.org/wiki/Java_Platform,_Standard_Edition#Nomenclature.2C_standards_and_specifications)。 2不見了:) –
你能解釋一下如何在java中使用''''''在你想使用''''的地方使用''''' – jackyesind
。 – xyz