【问题标题】:How to query the sqflite database using the LIKE statement and the % or * sql wildcard如何使用 LIKE 语句和 % 或 * sql 通配符查询 sqflite 数据库
【发布时间】:2019-09-18 05:27:37
【问题描述】:

我正在尝试使用 companyName 查询 Companies 表,我想获取其 companyName(s) 包含查询字符串的公司,而不仅仅是其 companyName 与我的查询字符串完全匹配的公司。如果我使用的是 sql,我会使用 ---WHERE companyName LIKE %queryString% 语句。 所以我的问题是如何在 sqflite 中进行这样的查询? 现在,由于 %

,我遇到了语法错误

表结构

CREATE TABLE Companies(
        id INTEGER PRIMARY KEY, 
        name TEXT,
        email TEXT, 
        website TEXT, 
        about TEXT, 
        phone TEXT,
        logo TEXT,
        created_at TEXT
      );
 );

搜索代码

Future<List<CompanyModel>> filterCompanies(String filterCriteria) async {
final db =await database;
List<CompanyModel> filteredCompanies = [];

var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE %?%;", [filterCriteria]);
if(res.length !=null){
  for (var item in res){
    filteredCompanies.add(JobModel.fromDb(item));
  }

 } 
 return filteredCompanies;
}

当我添加 % 时,出现语法错误。

【问题讨论】:

  • 你的代码在哪里?你的数据库结构是什么?您在现有文档中发现了哪些与您的问题相关的内容?
  • 现有的文档没有说明这个问题。当我寻找解决方法时,我没有发现任何关于这个问题的信息。我用我的代码编辑了帖子

标签: dart flutter sqflite


【解决方案1】:

接受的答案对我来说会导致构建错误。我正在使用 sqflite:^1.1.7+1 和颤振:v1.13.5。
从下面的讨论中可以看出,百分比字符应该在参数中而不是在查询中,即

 res = await db.query(
  "Companies",
  where: "name LIKE ?"
  whereArgs: ['%$title']
 );

参考:https://github.com/tekartik/sqflite/issues/316

【讨论】:

    【解决方案2】:

    我尝试了上述所有答案,但没有奏效。最后:

    await db.query(
      "Companies",
      where:  "name LIKE ?",
      whereArgs: ['%$query%']
    );
    

    【讨论】:

    • 这个对我来说是一个可行的解决方案,谢谢!
    【解决方案3】:

    以下代码有效:

    var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE '%$filterCriteria%'");
    
    

    【讨论】:

    • 我猜答案是,你需要在 LIKE 变量的两边加上 %
    【解决方案4】:

    这是最终完美地为我工作的代码。

    res = await db.query(
      "Companies",
      where: "name LIKE '%$?%'"
      whereArgs: [title]
    );
    

    【讨论】:

      【解决方案5】:

      你必须使用这个语法:LIKE "搜索字符串"

      这是一个例子:

      var res = await db.rawQuery(' SELECT * FROM Companies WHERE name LIKE "%$filterCriteria%" ');

      它适用于颤振和 sqflite

      【讨论】:

        【解决方案6】:

        使用这个

        var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE '%?%';", [filterCriteria]);
        

        代替

        var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE %?%;", [filterCriteria]);
        

        将类似条件放在单引号中('...')

        【讨论】:

          【解决方案7】:

          这对我有用

          var res = await db.rawQuery("SELECT * FROM Companies WHERE name LIKE ?",['%$filterCriteria%']);

          【讨论】:

          • 您好!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
          猜你喜欢
          • 1970-01-01
          • 2012-12-25
          • 1970-01-01
          • 2014-06-22
          • 2014-05-26
          • 1970-01-01
          • 1970-01-01
          • 2020-09-23
          • 2015-02-18
          相关资源
          最近更新 更多