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

React Native SQLite LIKE查询无结果及多分类筛选问题

React Native SQLite 查询问题解决

一、LIKE条件返回空数组的修复

你的代码存在语法笔误:参数中写成了%${query}$%,这里的$是错误符号,应该替换为%,导致实际匹配的是带$后缀的字符串,自然无法查询到结果。

修复后的单条件查询代码:

return new Promise((resolve, reject) => {
  db.transaction((tx) => {
    tx.executeSql(
      "select * from menuitems WHERE title LIKE ?",
      [`%${query}%`], // 将$修正为%
      (_, { rows }) => {
        useDevLogData(rows._array, "filterByQueryAndCategories rows._array");
        resolve(rows._array); // 需手动resolve结果供外部获取
      },
      (_, error) => {
        reject(error); // 新增错误回调捕获异常
        return true; // 终止事务避免后续执行
      }
    );
  }, reject);
});

二、模糊搜索+分类IN的联合查询实现

要实现title LIKE %xxx% AND category IN (分类1,分类2)的效果,需动态生成IN子句的占位符,同时将模糊搜索参数与分类数组参数合并,避免SQL注入风险。

完整实现代码:

const filterMenuItems = (searchQuery, categories) => {
  return new Promise((resolve, reject) => {
    db.transaction((tx) => {
      let sql = "select * from menuitems WHERE 1=1";
      const params = [];

      // 拼接模糊搜索条件
      if (searchQuery) {
        sql += " AND title LIKE ?";
        params.push(`%${searchQuery}%`);
      }

      // 拼接分类IN条件
      if (categories?.length > 0) {
        // 生成对应数量的?占位符
        const placeholders = categories.map(() => "?").join(",");
        sql += ` AND category IN (${placeholders})`;
        params.push(...categories); // 展开分类数组加入参数列表
      }

      tx.executeSql(
        sql,
        params,
        (_, { rows }) => {
          useDevLogData(rows._array, "filterByQueryAndCategories rows._array");
          resolve(rows._array);
        },
        (_, error) => {
          reject(error);
          return true;
        }
      );
    }, reject);
  });
};

// 使用示例
filterMenuItems("Spinach", ["Appetizers", "Salads"])
  .then(items => console.log("筛选结果:", items))
  .catch(err => console.error("查询错误:", err));

代码说明

  • 用WHERE 1=1作为基础条件,方便后续灵活拼接AND子句,避免空条件或单条件时的SQL语法错误
  • 动态生成IN子句的占位符,永远不要直接将分类字符串拼接进SQL,防止SQL注入
  • 严格对应SQL占位符与参数数组的顺序,确保查询逻辑正确
  • 新增错误回调,便于排查执行过程中的异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 11:33:15