【问题标题】:Text search in SQLite database - AndroidSQLite 数据库中的文本搜索 - Android
【发布时间】:2014-03-18 14:51:24
【问题描述】:

我有一个有 6 列的数据库,其中 2 列是文本格式。当用户输入一个字符串时,我想在 2 个文本列中搜索该字符串并返回这些行。这是我想出的代码:

mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_DATE}, 
                                        KEY_BODY + " LIKE '"+search_text+"%' OR "
                                      + KEY_TITLE + " LIKE '"+search_text+"%'" , 
                                        null, null, null,KEY_DATE_INT + " DESC");

我有理由相信这会转化为

Select KEY_ROWID, KEY_TITLE, KEY_DATE from DATABASE_TABLE where {(KEY_BODY LIKE 'search_text') OR (KEY_BODY LIKE 'search_text')}   

我遇到的问题是这只搜索列的第一个单词。例如,如果列中的文本是“This is a test”并且搜索字符串是“test”,则查询不会返回该行。如果搜索文本是“this”,它将返回该行。

我做错了什么,有没有更好的方法在 Android 的 SQLite 数据库中实现文本搜索。

【问题讨论】:

  • 这是因为您在 search_text only 之后放置了 '%',这意味着只查找以 search_text 开头的记录,而不必理会它后面的内容。您需要在它之前放置“%”以获得完美的过滤器,如下面@Rashmi 的答案所示。
  • 感谢您的帮助。干杯。

标签: android sqlite


【解决方案1】:

请尝试

mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_TITLE, KEY_DATE}, 
                                            KEY_BODY + " LIKE '%"+search_text+"%' OR "
                                          + KEY_TITLE + " LIKE '%"+search_text+"%'" , 
                                            null, null, null,KEY_DATE_INT + " DESC");

这个想法是,如果你想搜索你的子字符串,那么你需要用%substring% 包裹,然后你的子字符串将从整个字符串中匹配。

【讨论】:

  • 效果很好。谢谢你。 “待搜索”是什么意思?
  • 抱歉我的英语不好。我想说的是您要在完整字符串中搜索的目标字符串(在您的情况下为“test”)。
猜你喜欢
  • 2011-12-31
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-28
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多