我有一个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("'", "\\") + "'";
答案 0 :(得分:3)
您应该使用参数化命令:
Cursor res =
db.rawQuery("SELECT * FROM Events WHERE DTSTART = ? AND DTEND = ? AND TITLE = ?;",
new String[]{ startTime, endTime, title });
这有助于避免SQL injections并使您不必以正确的方式格式化参数。也就是说,你不必像SQLite期望的那样格式化日期,你不必关心撇号,你不必关心文化特定的数字格式等等当然它是更容易编写,阅读和维护。