应用程序有一个SearchView
,它从特定的数据库表中获取建议。在Android 5.0出现之前,所有工作都没有任何错误。
从那时起,当SQLiteQueryBuilder
查询数据库以填充Cursor
对象时,返回为空游标。不是NULL
,而是空的。
在其他平台上,我可以通过Cursor
输出DatabaseUtils.dumpCursorToString(cursorObject)
的内容,但在Android 5.0+上,该方法报告空对象的输出
将光标转储为空 <<<<<
更多:当我从5.0多个设备中提取数据库文件并运行本地SQL查询时,我可以获取所有数据。所以数据库确实有效。查询是最简单的
SELECT rowid AS _id, suggest_text_1, suggest_text_2, rowid AS suggest_intent_data_id
FROM fts
WHERE (fts MATCH '*e*') //<-- I pressed "e" on the keyboard
从数据库中选择数据并填充Cursor
对象的逻辑非常简单
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(FTS3_TABLE);
builder.setProjectionMap(mColumnMap);
Cursor cursor = builder.query(db,columns, selection, selectionArgs,
null, null, null);
我试过寻找一些弃用的方法,但没有任何运气。
我已经花了3天的时间来调试流程中的每一步,我不知道可能导致此类行为的任何想法。
任何人都有任何想法?
修改
方法buildQuery()
String query = builder.buildQuery(columns, selection, null, null, null, null);
RESULT:
SELECT rowid AS _id, suggest_text_1, suggest_text_2, rowid AS suggest_intent_data_id
FROM fts
WHERE (fts MATCH ?)
selection
和selectionArgs
参数就像这样创建
String selection = FTS3_TABLE + " MATCH ?";
String[] selectionArgs = new String[]{"*" + query + "*"};
RAW查询与builder.query()
String query = builder.buildQuery(columns, selection, null, null, null, null);
Cursor temp = db.rawQuery(query, selectionArgs);
String output = DatabaseUtils.dumpCursorToString(temp);
Output: >>>>> Dumping cursor android.database.sqlite.SQLiteCursor@295023a7
<<<<<
答案 0 :(得分:2)
由laalto回答https://stackoverflow.com/a/30710226/437039
TypeError: Cannot set property 'innerHTML' of null
查询在任何版本的sqlite中都没有正确。你之前得到一些结果这一事实只是一个巧合。只有前缀格式MATCH '*foo*'
(和MATCH 'foo*'
)为supported。Lollipop ships with a newer version of sqlite。有关sqlite版本之间更改的详细列表,请参阅changelog。
答案 1 :(得分:0)
您是否尝试使用SQLiteDatabase查询方法进行查询,如下所示?
String selection = "fts" + " =? AND " +
String[] selectionArgs = new String [] {
"*e*"
};
String[] projection = new String [] { "rowId", "suggested_text"};
SQLiteDatabase db = mDbHelper.getReadableDatabase();
Cursor cursor = db.query("tableName",
projection,selection, selectionArgs, null, null, null);