因此,我一直在寻找最简单,最有效的方法来逃避SQLite中的恶意字符串。这里的大多数答案通常都有正则表达式路线。我偶然发现了一个找到sqlEscapeString的答案。
有一个问题。当它逃脱时,它似乎也在String的末尾添加单引号,因此它从:Test's
到:'Test''s'
。现在我真的不知道为什么它甚至会这样做,但是我希望有一个新的Android功能存在相反的功能。 DatabaseUtils
似乎没有它的伴侣功能。
答案 0 :(得分:3)
我认为防止恶意字符串的最有效方法是让SQLite完成这项工作。 Android包含该功能并使用ContentValues
,String[]
或Object[]
参数,具体取决于您用于查询数据库的方法,以保存转义值:
在使用上述方法时,在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("''", "'");
}