SQLite撇号导致强制关闭 - .replace("'","''")无法解决问题

时间:2014-12-05 21:27:33

标签: java android sqlite android-sqlite

我有一个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("'", "\\") + "'";

1 个答案:

答案 0 :(得分:3)

您应该使用参数化命令:

Cursor res = 
    db.rawQuery("SELECT * FROM Events WHERE DTSTART = ? AND DTEND = ? AND TITLE = ?;",
                new String[]{ startTime, endTime, title });

这有助于避免SQL injections并使您不必以正确的方式格式化参数。也就是说,你不必像SQLite期望的那样格式化日期,你不必关心撇号,你不必关心文化特定的数字格式等等当然它是更容易编写,阅读和维护。