如何在 java 中使用单引号创建查询语句。当我用单引号搜索一个单词时,它显示没有要显示的记录
例如我有一个名字 D'costa 我将如何使用 java 搜索它
getSearchByUserSQL.append("SELECT * FROM SID_USERS ");
getSearchByUserSQL.append("WHERE lower(FIRSTNAME) like ?
OR lower(LASTNAME) like ?");
虽然您可以尝试手动转义所有字符串,但它的工作量很大而且很困难(不同的数据库可能有不同的转义规则)。作为你不应该这样做的进一步证据 - 看看 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();
你需要'
用\'
. 这\
是一个转义字符。
您可以使用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 \ */
在 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 字符串中的示例。它被称为“字符串初始”