【问题标题】:Android sqlite query to match column containing textAndroid sqlite查询以匹配包含文本的列
【发布时间】:2013-04-15 18:38:34
【问题描述】:

如果给定的列包含其中的任何文本,则尝试进行将返回匹配项的查询。例如,如果我要传递单词“really”,则包含文本“This is a really long line of text”的列将匹配。到目前为止,我的查询只有在完全匹配时才会返回,所以它只会匹配包含“really”的列,就是这样。

我尝试了几种方法,但似乎都返回了相同的结果:

第一种方式(s 是我传入的字符串):

    Cursor cursor = mDb.query(DATABASE_TABLE, new String[] {KEY_TITLE}, KEY_TITLE + " LIKE '%" + s + "%' COLLATE NOCASE", null, null, null, null);

下一条路

String p_query = "SELECT COUNT(*) FROM data WHERE number=? COLLATE NOCASE";

【问题讨论】:

  • 据我所知,您将如何处理光标对象?你将如何处理与之相关的数据。可能是一个蹩脚的问题,但我对 Sqlite/Database 还不到 3 天。

标签: java android sqlite


【解决方案1】:

如果给定的列包含其中的任何文本,则尝试进行将返回匹配项的查询。

这对我有用,而且是参数化的:

Cursor cursor = mDb.query(DATABASE_TABLE, new String[] {KEY_TITLE}, 
        KEY_TITLE + " LIKE ?", new String[] {"%" + s + "%"}, 
        null, null, null);

“真的”是一个足够独特的词,但是如果您正在搜索“冰”之类的内容并且不想要“骰子”、“副”、“冰淇淋”等,则必须使用不同的模式,例如:"% " + s + " %"s + " %"

或者使用带有tokenizer 的 FTS 表,例如 Porter Stemming。

【讨论】:

  • 哇。你救了我。谢谢
  • 它节省了我的时间。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 2018-03-13
  • 1970-01-01
  • 2020-09-25
  • 2014-08-24
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多