我有一个自定义搜索提供程序,如下所示:
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
答案 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。