我正在使用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; }
答案 0 :(得分:3)
我确实发现了2013年可能相关的错误报告:Android 56062。如果这是一个问题,在这里,您可以绕过update()
并直接运行查询而无需方便的方法。
与此同时,您的查询存在语法问题。使用LIKE
子句绑定值很棘手。引号中的?
只是一个文字问号。
WHERE foo LIKE '%?%'
以上只是搜索包含问号的任何foo
:
WHERE foo LIKE ?
以上允许您将通配符作为绑定参数的一部分传递:%sometext%
。
WHERE foo LIKE '%' || ? || '%'
顺便说一句,我希望你意识到a query with leading and trailing wildcards can be very expensive。