如何使用java中的单引号创建查询语句。当我用单引号搜索单词时,它显示没有要显示的记录
例如我有一个名字D'costa我将如何使用java
进行搜索 getSearchByUserSQL.append("SELECT * FROM SID_USERS ");
getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like ?
OR lower(LASTNAME) like ?");
答案 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)
您需要使用'
转义\'
。这里\
是一个转义字符。'
替换为\'
。
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 \ */
答案 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”