处理搜索中的单引号

时间:2013-01-15 04:50:14

标签: java oracle struts2

如何使用java中的单引号创建查询语句。当我用单引号搜索单词时,它显示没有要显示的记录

例如我有一个名字D'costa我将如何使用java

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

3 个答案:

答案 0 :(得分:4)

当你可以尝试手动转义所有字符串时,它需要做很多工作而且很难(不同的DB可能有不同的转义规则)。作为进一步的证据,你不应该这样做 - 看看apahe commons lang - 他们放弃了在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();

答案 1 :(得分:1)

您需要使用'转义\'。这里\是一个转义字符。 您可以使用String.replace'替换为\'

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

答案 2 :(得分: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\'");

会发现“皮特”和“重复”作为名字。只需将单引号作为PL / SQL字符串中的示例的文字。它被称为“String Inception”