我正在使用 sqlite FTS3 数据库和我的 Android 应用程序。
public Cursor getWordMatches(String query, String[] columns) {
String selection = KEY_WORD + " MATCH ?";
String[] selectionArgs = new String[] {query+"*"};
return query(selection, selectionArgs, columns);
}
.....
private Cursor query(String selection, String[] selectionArgs, String[] columns) {
SQLiteQueryBuilder builder = new SQLiteQueryBuilder();
builder.setTables(FTS_VIRTUAL_TABLE);
builder.setProjectionMap(mColumnMap);
Cursor cursor = builder.query(mDatabaseOpenHelper.getReadableDatabase(),
columns, selection, selectionArgs, null, null, null);
if (cursor == null) {
return null;
} else if (!cursor.moveToFirst()) {
cursor.close();
return null;
}
return cursor;
}
如果我进行查询并搜索“house”,我将得到:
household
house
apartment house
big house
(我在正则表达式中得到了所有有房子的东西house)
我怎样才能得到这样的查询结果?
household
house
(所以我只想要以 house 开头的结果,在正则表达式 house* 中)
如果我使用 LIKE 语句,我的 Android 应用程序会强制关闭(可能是因为数据库有 200000 行)。
那么我应该以某种方式结合 MATCH 和 LIKE 语句吗?
是否可以在 Android 上执行此操作,如果不是,也许我应该在从该查询中获取光标后尝试在光标上运行一些正则表达式?