在SQLite Helper类中遇到LIKE运算符问题

时间:2014-02-11 21:40:50

标签: android sqlite sql-like

我正在使用SQLLiteHelper类在android中进行数据库调用。我有下面的代码,其中基本上我试图找到旧评论的任何实例,并用新评论替换。如果我在LIKE之后删除单引号,那么我收到此消息。

(1) near "%": syntax error

如果我保留单引号,那么我会收到以下消息。不确定我做错了什么。

Too many bind arguments.  2 arguments were provided but the statement needs 1 arguments.
public int updateComment(String oldComment, String newComment)
    {
        ContentValues values = new ContentValues();
        values.put(CommentEntry.COLUMN_NAME_COMMENT, newComment);
String selection = CommentEntry.COLUMN_NAME_COMMENT + " LIKE '%?%'";
        String[] selectionArgs = new String[]{ oldComment };
        int count = database.update(CommentEntry.TABLE_NAME, values, selection, selectionArgs);
        return count;
    }

1 个答案:

答案 0 :(得分:3)

我确实发现了2013年可能相关的错误报告:Android 56062。如果这是一个问题,在这里,您可以绕过update()并直接运行查询而无需方便的方法。

与此同时,您的查询存在语法问题。使用LIKE子句绑定值很棘手。引号中的?只是一个文字问号。

WHERE foo LIKE '%?%'

以上只是搜索包含问号的任何foo

WHERE foo LIKE ?

以上允许您将通配符作为绑定参数的一部分传递:%sometext%

但是,我认为这有点难看。如果我们知道我们总是要使用通配符进行搜索,那么我想使用concatenation

WHERE foo LIKE '%' || ? || '%'

顺便说一句,我希望你意识到a query with leading and trailing wildcards can be very expensive