尝试进行查询,如果给定列包含其中任何位置的文本,则该查询将返回匹配项。例如,如果我要传递单词“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";
最佳答案
Trying to make a query that will return a match if the given column contains the text anywhere inside.
这对我有用并且它是参数化的:
Cursor cursor = mDb.query(DATABASE_TABLE, new String[] {KEY_TITLE},
KEY_TITLE + " LIKE ?", new String[] {"%" + s + "%"},
null, null, null);
“真的”是一个足够独特的词,但是如果您要搜索“冰”之类的东西并且不想搜索“骰子”、“恶习”、“冰淇淋”等,则必须使用不同的模式,例如: "% "+ s + "%"
和 s + "%"
。
或者使用带有 tokenizer 的 FTS 表,比如 Porter 词干提取。
关于java - Android sqlite 查询以匹配包含文本的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022427/