3

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

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

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

3 回答 3

4

虽然您可以尝试手动转义所有字符串,但它的工作量很大而且很困难(不同的数据库可能有不同的转义规则)。作为你不应该这样做的进一步证据 - 看看 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();
于 2013-01-15T05:04:46.183 回答
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 \ */

文档链接

于 2013-01-15T04:52:40.753 回答
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 字符串中的示例。它被称为“字符串初始”

于 2013-01-15T04:56:39.850 回答