0

キーに特定の文字列が含まれているデータベースエントリを削除する必要があります。

エスケープする前の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ステートメントが生成されるため、機能させることができません。

4

1 に答える 1

2

?クエリで使用しているため、パラメーター化されています。連結を使用していない (ように思われる) ため、文字のエスケープについて心配する必要はありません。生の文字列を使用するだけです。ただし、 には%文字がないためwhere、クエリは を使用するのと同じです=

于 2012-08-23T08:14:10.950 に答える