Android sqlite查询匹配包含文本的列

时间:2013-04-15 18:38:34

标签: java android sqlite

如果给定列包含内部任何位置的文本,请尝试进行将返回匹配的查询。例如,如果我要传递“真的”这个词,那么包含文本“这是一个非常长的文本行”的列将匹配。到目前为止,我的查询仅在完全匹配时返回,因此它只匹配包含“真正”的列,就是它。

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

第一种方式(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";

1 个答案:

答案 0 :(得分:27)

  

如果给定列包含内部任何位置的文本,则尝试进行将返回匹配的查询。

这对我有用,并且参数化了:

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。