我有一个试图运行的SQLite查询,但是由于标题字符串中的撇号,它被强制关闭。我试图通过使用title.replace("'", "''")
和title.replace("'", "\\")
以及title.replaceAll(“'”,“ \”);来解决此问题。但是由于撇号仍会强制关闭-当我调试时-标题中仍然存在撇号-有人能指出我在这里做错了什么吗?
源代码段:
String title = info.get(MeetingInfo.MEETING_TITLE);
String selectionClause = Events.DTSTART + " = '" + startTime + "' AND "
+ Events.DTEND + " = '" + endTime + "' AND "
+ Events.TITLE + " = '" + title.replace("'", "\\") + "'";
最佳答案
您应该使用参数化命令:
Cursor res =
db.rawQuery("SELECT * FROM Events WHERE DTSTART = ? AND DTEND = ? AND TITLE = ?;",
new String[]{ startTime, endTime, title });
这有助于避免SQL injections并使您不必以正确的方式格式化参数。即,您不必像SQLite期望的那样格式化日期,不必关心撇号,不必关心特定于区域性的数字格式等,当然,它的编写,读取和编辑更容易。保持。