2012-08-23 46 views
0

我需要删除键中包含特定字符串的数据库条目。SQLite 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语句。

回答

2

由于您在查询中使用了?,因此将其设置为参数。你没有使用连接(看起来),所以你不需要担心逃逸字符。只需使用原始字符串。但是,由于where中没有%个字符,因此您的查询相当于使用=

+0

int success = database.delete(CacheDatabaseHelper.DATABASE_TABLE,“KEY LIKE?”,new String [] {wildCard}); \t \t logger.debug(“Delete attempt affected”+ success +“lines!”); EntityCollection(Id ='INST_PAT_ID%200100010050057716') - 删除尝试影响了0行! – Kay