当前位置: 首页 > 知识库问答 >
问题:

SQLLiteHelper类中的LIKE运算符存在问题

太叔永新
2023-03-14

我正在使用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个答案

古弘
2023-03-14

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

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

WHERE foo LIKE '%?%'

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

WHERE foo LIKE ?

上面允许您将通配符作为bind参数的一部分传入:%sometext%

不过我觉得这有点难看。如果我们知道我们总是使用通配符进行搜索,我想使用串联:

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

顺便说一句,我希望您意识到带有前导和尾随通配符的查询可能非常昂贵。

 类似资料:
  • 在 Transact-SQL 中,LIKE 运算符用于搜索带有 WHERE 子句的列中指定的模式。Transact-SQL 中的 LIKE 子句用于比较相同的值以使用通配符运算符。 两个通配符与 LIKE 运算符结合使用: - 百分号代表零、一个或一些字符。 - 下划线符号代表单个字符。 注意:MS Access 使用星号 () 代替百分号 () 和问号 (?) 而不是下划线 ()。 百分号代表

  • 问题内容: 我想用Hibernate实现一些通用过滤器。它应该像来自SQL的运算符一样工作: 我在哪里 key 是列名, value 是它的值。 我尝试过这样的事情: 但是,当字段类型不是 String时 ,它将导致 : 有办法解决吗? 问题答案: 在这种情况下,我建议使用而不是。 我不记得Criteria是否像Query对象一样将无法理解的事情传递给数据库。基本上,这意味着如果您使用的功能是Hi

  • Like 运算符示例 此示例返回员工名字以字母 A 到 D 开始的员工列表。 此示例调用过程 EnumFields 过程,且可以在 SELECT 语句示例中找到该过程。 Sub LikeX() Dim dbs As Database, rst As Recordset ' 在您的计算机中修改此行使其正确指到 Northwind 的路径。 Set dbs = OpenDatabase("Northw

  • Like 运算符 比较字符串表达式和 SQL 表达式中的模式。 语法 expression Like "pattern" 运算符 Like 的语法包含下列部分: 部分 说明 expression 用于 WHERE 子句的 SQL 表达式 Pattern 表达式与之比较的字符串或字符串文本。 说明 可用 Like 运算符来找出符合指定样式的字段值。对于 pattern,可以指定完整的值(例如,Lik

  • 问题内容: 有人可以告诉我,这为什么不起作用: 我收到以下错误: 为了可以使用运算符,将模型的属性更改为字符串的唯一解决方案是吗? BR 问题答案: JPA不支持Integers的like(),仅支持字符串。一些数据库确实支持整数,而其他则不支持。 EclipseLink应该允许将like()与Integer一起使用(前提是您的数据库支持它)。您使用什么版本?可能需要使用> = 2.1。如果无法在

  • 问题内容: 当在oracle中使用LIKE运算符匹配任何字符时,我都不能使用[ specifier ]例如。找出以’s’或’r’开头的客户名称,所以我们不能将查询写为“ select emp fromemp where customer LIKE’[sr]%’”; 我们不能在ORACLE中的LIKE运算符中使用“ []”花括号吗? 问题答案: 不,LIKE不会那样做。 但是您可以使用正则表达式。