我有一个试图运行的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期望的那样格式化日期,不必关心撇号,不必关心特定于区域性的数字格式等,当然,它的编写,读取和编辑更容易。保持。

07-24 09:45
查看更多