Android SQLite内容提供程序查询(可搜索)

时间:2015-08-23 17:02:43

标签: android sqlite android-contentprovider

我有一个自定义搜索提供程序,如下所示:

componentDidMount() {
    console.log(React.findDOMNode(this.refs.bar));
}

经过独立测试后,我的搜索建议中<searchable xmlns:android="http://schemas.android.com/apk/res/android" android:hint="hint" android:label="label" android:searchSuggestAuthority="com.path_to_provider" android:searchSuggestIntentAction="android.intent.action.VIEW" android:searchSuggestIntentData="content://com.cypher.path_to_provider/table_name" android:searchSuggestSelection="word LIKE ? || '%' OR word LIKE '% ' || ? || '%'" /> 的每一面都可以正常使用。当我出于某种原因使用OR时,查询不起作用。我的查询有问题吗?我的目标是进行搜索&#34; cat&#34;匹配&#34;灾难性的&#34;并且&#34;看看猫&#34;

这是我的OR查询

ContentProvider

1 个答案:

答案 0 :(得分:0)

查询语法看起来很好,至少,我似乎得到了合理的结果:

tmp$ sqlite3 test.db
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
sqlite> create table words (word VARCHAR(20));
sqlite> insert into words VALUES ("catastrophic");
sqlite> insert into words VALUES ("look at the cats");
sqlite> insert into words VALUES ("uncatty");
sqlite> SELECT * FROM words;
catastrophic
look at the cats
uncatty
sqlite> SELECT * FROM words WHERE word LIKE 'cat' || '%' OR word LIKE '% ' || 'cat' || '%';
catastrophic
look at the cats

(我在'cat'中手动替换了你的问号,因为我在sqlite3 CLI中运行。)

您没有指定查询无法正常工作的方式。如果您收到错误:可能是因为您没有提供足够的selectionArgs吗?当您有两个问号时,您的selectionArgs数组必须是两个元素(在这种情况下,两个元素将包含相同的值)。你也可以use ?1 in both places instead of just ?,如下:

word LIKE ?1 || '%' OR word LIKE '% ' || ?1 || '%'

这将使两个占位符都使用第一个选择arg(因此只需要一个选择arg)。

我希望我能正确猜到你的问题。 :)

编辑:啊,我现在意识到你在执行查询时没有控制selectionArgs参数,而是来自框架。然后是的,框架可能只发送一个arg,所以你的多个占位符导致问题。在那种情况下,使用?1代替?绝对应该是要走的路 - 你的查询只需要一个选择arg。