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

如何在SQLite数据库多列搜索字符串并将结果展示在ListView?

问题分析与修复方案

让我看看你的代码,问题主要出在两个地方:

1. WHERE子句未包含COMMENT列的搜索条件

你现在的查询只对KEY_QUESTION和KEY_ANSWER做了模糊匹配,但完全没把KEY_COMMENT加进去,自然不会返回评论列含有关键词的记录。

2. 占位符与参数数量不匹配

你的WHERE语句里有两个?占位符,但whereArgs数组只传了一个searchString。这种参数不匹配的情况会导致数据库执行查询时出错,最终可能只会生效第一个条件(也就是只搜索QUESTION列),甚至直接抛出异常。


修正后的代码

public Cursor search(String searchString) {
    String[] columns = new String[]{ KEY_QUESTION, KEY_ANSWER, KEY_COMMENT };
    // 把COMMENT列也加入WHERE条件,并且每个LIKE都对应一个占位符
    String where = KEY_QUESTION + " LIKE ? OR " + KEY_ANSWER + " LIKE ? OR " + KEY_COMMENT + " LIKE ?";
    searchString = "%" + searchString + "%";
    // 每个占位符都需要对应一个参数,这里要传三次searchString
    String[] whereArgs = new String[]{ searchString, searchString, searchString };
    Cursor cursor = null;
    try {
        if (database == null) {
            database = openHelper.getReadableDatabase();
        }
        cursor = database.query(TABLE_FLASH, columns, where, whereArgs, null, null, null);
    } catch (Exception e) {
        Log.d(TAG, "SEARCH EXCEPTION! " + e);
    }
    return cursor;
}

改动说明

  • 在WHERE子句末尾添加了OR KEY_COMMENT LIKE ?,让查询覆盖三列。
  • whereArgs数组现在包含三个相同的searchString,对应三个?占位符,保证参数数量匹配。

这样修改后,只要任意一列包含你输入的关键词,对应的记录就会被检索出来啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:03:32