SQLite LIKE语句和转义字符

时间:2012-08-23 07:57:24

标签: java android sqlite sql-like

我需要删除密钥包含某个字符串的数据库条目。

转义前的SearchString:

EntityCollection(Id='INST_PAT_ID%200100010050057716')

转义代码:

logger.debug("wildCard: " + wildCard);
String escapedString = wildCard.replace("%", "\\%");
String escapedString2 = escapedString.replace("'", "\\'");
String escapedString3 = escapedString2.replace("_", "\\_");
logger.debug("escapedString3: " + escapedString3);

转义后的SearchString:

EntityCollection(Id=\''INST\_PAT\_ID\%200100010050057716\'')%'' {escape '\'}' in key.

SQL语句看起来像这样。

final String where = "key LIKE ?";
final String[] args = new String[] { DatabaseUtils.sqlEscapeString("'%" + escapedString3 + "%'" + " {escape '\\'}") };
int success = database.delete(CacheDatabaseHelper.DATABASE_TABLE, where, args);

logger.debug("Delete attempt affected " + success + " lines!");
logger.debug("Deleted all cache entries from database containing: " + args[0] + " in key.");

但是我无法让它工作,因为它会生成错误的SQL语句。

1 个答案:

答案 0 :(得分:2)

由于您在查询中使用?,因此会对其进行参数化。你没有使用连接(似乎),所以你不必担心转义字符。只需使用原始字符串。但是,由于%中没有where个字符,因此您的查询相当于使用=