【问题标题】:Wildcard not working in SQLite通配符在 SQLite 中不起作用
【发布时间】:2016-11-05 17:26:52
【问题描述】:

我一直在尝试在 Android 应用程序的搜索中使用通配符,并不断遇到错误。

我正在使用以下字符串对我的应用程序执行搜索:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" },
              "name LIKE %?%", new String[] { query }, null, null, null);

当我使用 name LIKE %?%name=%?% 时,我得到一个 "near "%": syntax error: , while compile: SELECT _id, name FROM namedrxns WHERE name=%?%" 错误。

但使用 name LIKE '%?%'name='%?%' 我得到的是“绑定或列索引超出范围:句柄 0x40cb70”

谁能告诉我我做错了什么?

谢谢!

【问题讨论】:

  • 如何将通配符添加到传入的变量中,而不是在查询中?
  • 完美运行,谢谢!这对我来说似乎有点傻,但没关系。如果您将其作为答案,我很乐意为您打勾:)
  • 听起来不错。绑定的字符串参数基本上会有引号和东西,所以你最终可能会得到类似 name = %'David'% 的东西,这是无效的 SQL。我的 SQL 知识并没有完全达到标准,所以这里完成的工作比我能说的要多一些,但这应该让你知道为什么必须按照 OMG ponies 的描述来完成。

标签: android database sqlite


【解决方案1】:

% 附加到query 参数。

IE:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" },
          "name LIKE ?", new String[] { "%"+query+"%" }, null, null, null);

就像 Thomas Mueller 已经说过的,请注意值中的 %_ 仍然可以用作通配符。

【讨论】:

  • 完整的值'query'被转义并放在''之间,所以你的%必须和它一起
【解决方案2】:

以下应该可以工作(但我没有用 SQLite 测试它):

"name LIKE '%' || ? || '%'"

请注意,值中的“%”和“_”仍可用作通配符。

【讨论】:

  • 谢谢,使用 CONCAT 使其在服务器端工作,但在我的 Android 设备上的 SQLite 中无法工作。这对我来说是正确的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-06
  • 2014-05-08
  • 1970-01-01
  • 2014-08-01
  • 2015-09-09
  • 2017-11-02
相关资源
最近更新 更多