繁体   English   中英

与selectArgs看起来像* queryTerm *的MATCH在Android 5.0+上停止工作

[英]MATCH with selectArgs looking like *queryTerm* stopped working on Android 5.0+

这是我的问题SQLiteDatabase游标的附录, 仅在Android 5.0+设备上为空 由于我不确定是什么引起了该错误,因此将关闭该窗口-认为这是一个正确填充的游标。 现在,我发现了导致空光标的原因。

在Android 5.0之前的版本中,搜索建议通过使用查询数据库来工作:

SELECT rowid AS _id, suggest_text_1, suggest_text_2, rowid AS suggest_intent_data_id 
FROM fts 
WHERE (fts MATCH ?) //for example '*e*'

从Android 5.0+开始,此功能不再起作用。 我已经进行了数十次测试,并且如果我将selectionArgs设置为"*" + query + "*" ,则select查询不会向Cursor对象返回任何内容

String selection = FTS3_TABLE + " MATCH ?";
String[] selectionArgs = new String[]{"*" + query + "*"};

在Android 5.0+上,仅当selectionArgsqueryquery + "*" 如果我在query之前放星号,它将停止工作。

注意:我通过查询字母e而不是特殊字符进行了测试。

数据库查询如下所示,并且在Android 5.0上也可以正常使用:

String[] columns = new String[]{
                BaseColumns._ID,
                KEY_QUESTION,
                KEY_ANSWER,
                SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID};
String selection = FTS3_TABLE + " MATCH ?";
String[] selectionArgs = new String[]{"*" + query + "*"};    

//mColumnMap
map.put(KEY_QUESTION, KEY_QUESTION);
map.put(KEY_ANSWER, KEY_ANSWER);
map.put(KEY_CARDID, KEY_CARDID);
map.put(KEY_CARDSET, KEY_CARDSET);
map.put(BaseColumns._ID, "rowid AS " +
         BaseColumns._ID);
map.put(SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID, "rowid AS " +
                SearchManager.SUGGEST_COLUMN_INTENT_DATA_ID);
map.put(SearchManager.SUGGEST_COLUMN_SHORTCUT_ID, "rowid AS " +
                SearchManager.SUGGEST_COLUMN_SHORTCUT_ID);
//mColumnMap part ends

SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
        builder.setTables(FTS3_TABLE);
        builder.setProjectionMap(mColumnMap);

Cursor cursor = builder.query(db,
                columns, selection, selectionArgs, null, null, null);

String temp = DatabaseUtils.dumpCursorToString(cursor); //empty string on Android 5.0+

如您所见,没有什么复杂或非同寻常的。

为什么我不能再在其两边使用带星号的查询了?

从这部分到Android 5.0,有什么变化?

MATCH '*foo*'查询在任何版本的sqlite中都无法正常工作。 您较早获得一些结果的事实只是一个巧合。 只要前缀形式MATCH 'foo*' (和MATCH 'foo' )的支持

棒棒糖附带了较新版本的sqlite 有关sqlite版本之间的更改的详细列表,请参见changelog

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM