У меня есть приложение для Android с базой данных SQLite, и я пытаюсь реализовать интерфейс поиска.Прежде всего, я понимаю, что создание базы данных FTS - это путь, но я подумал, что мог бы использовать оператор LIKE и получить аналогичные результаты, если бы использовал подстановочные знаки.Таким образом, интерфейс может быть протестирован, а серверная часть обновлена позже.
Вот как я строю запрос:
public Cursor getMatching(String query) {
Cursor mCursor = db.query(false, TABLE, new String[] { KEY_ROWID,
KEY_NAME }, KEY_NAME + " LIKE ?",
new String[] { "%" + query + "%" }, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
KEY_NAME - текстовый столбец, для которого я хочу получить результаты, а запрос -строчная строка, с которой я хочу сопоставить.Я ожидаю, что он будет возвращать результаты, когда запрос появляется в любом месте имени, без учета регистра.Однако то, что я наблюдаю, отличается.Результаты запроса "" (пустая строка):
Coch**** ****
Squi*** St*****
Owe** ****
Smi** Ca****
G. Bur** Jo******
Gr******* Brown
Теперь, когда я запрашиваю "o":
Owe** ****
G. Bur** Jo******
Gr******* Brown
Как ни странно, первый результат отфильтровывается, хотя и содержит«о».Когда я запрашиваю «ow»:
Gr******* Brown
И наконец, когда я запрашиваю «own»:
null
Вот метод, который я использую для обработки курсора:
public static void logMatches(Context context, String query) {
DBAdapter adapter = new DBAdapter(context);
adapter.open();
Cursor c = adapter.getMatching(query);
if (c == null)
return;
while (c.moveToNext()) {
String name = c.getString(c
.getColumnIndex(DBAdapter.KEY_NAME));
Log.d(TAG, name);
}
c.close();
adapter.close();
}
Где DBAdapter содержит SQLiteOpenHelper.Контекст, который я передаю, исходит из ContentProvider с использованием метода getContext ().
Я хочу в конечном итоге реализовать таблицу FTS, но моя база данных теперь довольно мала, поэтому я надеялся, что смогу реализовать аналогичную функциональность, используясуществующие таблицы на данный момент.Можно ли делать то, что я хочу, с предложением LIKE?Я делаю очевидную ошибку?