You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite查询中通配符的正确用法及LIKE语句语法错误解决

解决SQLite LIKE查询的语法错误及通配符使用指南

嘿,我来帮你搞定这个SQLite查询的问题~

问题出在哪?

你碰到的android.database.sqlite.SQLiteException: near "%": syntax error错误,核心原因是LIKE子句里的搜索字符串没加单引号。SQL语法规定,字符串字面量必须用单引号包裹,你直接写%"+item+"%,数据库会把%当成非法语法,自然就报错了。

怎么改代码?

我推荐用参数化查询的方式,不仅能解决语法问题,还能避免SQL注入风险,这是开发里的最佳实践:

public Cursor getSearch(String item) {
    SQLiteDatabase db = this.getReadableDatabase();
    // 用?做占位符,后面单独传参数
    String mQuery = "SELECT * FROM hadiths WHERE text LIKE ?";
    // 把搜索词用%包裹后作为参数传入
    String[] selectionArgs = new String[]{"%" + item + "%"};
    Cursor cursor = db.rawQuery(mQuery, selectionArgs);
    return cursor;
}

要是你暂时想用字符串拼接的方式(不推荐,有安全隐患),记得给整个带通配符的字符串加上单引号:

public Cursor getSearch(String item) {
    SQLiteDatabase db = this.getReadableDatabase();
    // 注意单引号要把%和搜索词一起包起来
    String mQuery = "SELECT * FROM hadiths WHERE text LIKE '%" + item + "%'";
    Cursor cursor = db.rawQuery(mQuery, null);
    return cursor;
}

聊聊SQLite的通配符用法

在SQLite的LIKE查询里,常用的通配符有两个:

  • %:匹配任意长度的字符(包括0个),比如%faizan%能找出所有包含"faizan"的文本。
  • _:匹配单个任意字符,比如f_aizan会匹配"faizan"、"fbizan"这类第一个字符是f、第三个是a的字符串。

如果要搜索的内容本身包含%或_(比如要找带"50%"的文本),就得用转义字符,默认是\:

SELECT * FROM hadiths WHERE text LIKE '%50\%' ESCAPE '\';

这里的\%会被识别成实际的%符号,而不是通配符。

内容的提问来源于stack exchange,提问作者Muhammad Faizan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:46:43