SQLite запрос с LIKE не работает
Неправильно работает запрос с LIKE. Результат выдает только если вводить точный запрос. Например: Запрос: Покраска - результат Покраска, запрос: Краска - нет результата. В чем моя ошибка. Заранее всем большое спасибо.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
userFilter = findViewById(R.id.userFilter);
listView = findViewById(R.id.listView);
listView.setVisibility(View.INVISIBLE);
final DatabaseAccessSmeta databaseAccessSmeta = DatabaseAccessSmeta.getInstance(this);
databaseAccessSmeta.open();
String poisk = userFilter.getText().toString();
List<String> quotes = databaseAccessSmeta.Search(poisk);
databaseAccessSmeta.close();
final ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.region_list, quotes);
listView.setAdapter(adapter);
userFilter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
String query = (s != null) ? s.toString() : "";
if (query.length() >= 3) {
listView.setVisibility(View.VISIBLE);
adapter.getFilter().filter(query);
} else {
// Either set an empty list or change visibility
listView.setVisibility(View.INVISIBLE);
adapter.getFilter().filter("");
}
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
// при изменении текста выполняем фильтрацию
public void onTextChanged(CharSequence s, int start, int before, int count) { }
});
}
Запрос к базе данных:
public List<String> Search(String poisk) {
List<String> mylist = new ArrayList<>();
String query;
query = "SELECT * FROM smeta_name WHERE rabota LIKE '%"+poisk+"%'";
this.database = openHelper.getWritableDatabase();
Cursor cursor = database.rawQuery(query, null);
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
mylist.add(cursor.getString(cursor
.getColumnIndex("rabota")));
cursor.moveToNext();
}
cursor.close();
return mylist;
}
Ответы (1 шт):
Оператор LIKE в SQLite правильно понимает только символы из набора ASCII:
Important Note: SQLite only understands upper/lower case for ASCII characters by default. The LIKE operator is case sensitive by default for unicode characters that are beyond the ASCII range. For example, the expression 'a' LIKE 'A' is TRUE but 'æ' LIKE 'Æ' is FALSE.
Соответственно, засовывать в LIKE кириллические символы/выражения бесполезно.
Это не баг, а фича :)