如何在使用sqlEscapeString()后取消转义String

时间:2012-09-01 04:29:20

标签: android sqlite escaping

因此,我一直在寻找最简单,最有效的方法来逃避SQLite中的恶意字符串。这里的大多数答案通常都有正则表达式路线。我偶然发现了一个找到sqlEscapeString的答案。

有一个问题。当它逃脱时,它似乎也在String的末尾添加单引号,因此它从:Test's到:'Test''s'。现在我真的不知道为什么它甚至会这样做,但是我希望有一个新的Android功能存在相反的功能。 DatabaseUtils似乎没有它的伴侣功能。

2 个答案:

答案 0 :(得分:3)

我认为防止恶意字符串的最有效方法是让SQLite完成这项工作。 Android包含该功能并使用ContentValuesString[]Object[]参数,具体取决于您用于查询数据库的方法,以保存转义值:

SQLiteDatabase.insert(...)

SQLiteDatabase.query(...)

SQLiteDatabase.update(...)

SQLiteDatabase.delete(...)

SQLiteDatabase.execSQL(...)

在使用上述方法时,在SQL语句中放置?来代替要转义的字符串。

答案 1 :(得分:2)

我为反向sqlEscapeString()制作了一个unescape()方法。

public String unescapeString(String string) {
    if (string == null)
        return null;

    StringBuilder sb = new StringBuilder(string);

    sb = sb.deleteCharAt(0);
    sb = sb.deleteCharAt(sb.length() - 1);

    return sb.toString().replaceAll("''", "'");
}