2015-12-06 3 views
-1

EDIT: Я нашел ответ. Используйте «GLOB». Какое странное слово, неудивительно, что я ничего не могу найти.Android SQLite с учетом регистра

Я пытаюсь использовать курсор в Android, чтобы сделать регистр в моей таблице SQLite чувствительным к регистру. У меня есть googled для этого, но все результаты людей спрашивают, как получить регистр без учета регистра и учебники о том, как сделать его нечувствительным к регистру. Это противоположность тому, что я хочу. Мне нужен регистр, чувствительный к регистру, но я все еще изучаю SQLite и не знаю, что добавить.

Это как мой курсор в настоящее время называется:

c = getContentResolver().query(element, null, PeriodicTable.SYMBOL + " LIKE? ", new String[]{guess}, "symbol"); 

элементы периодической таблицы чувствительны к регистру, поэтому, если вы вводите CO, вы получаете углерода и кислорода. Если вы входите в Co, вы получаете Cobalt. Я хочу использовать чувствительность к регистру для фильтрации ошибочных пользовательских записей.

+0

В периодической таблице нет такой вещи, как «Углерод и кислород» (CO). Существует «Carbon» (C), и есть «Oxygen» (O). И есть «Кобальт» (Co). Поэтому, если вы введете 'CO' или' co' или 'cO' или' Co', вы всегда получите 'Cobalt'. Почему вы должны использовать 'LIKE' или' GLOB', когда вы можете использовать '='? –

+0

@Frank N. Stein Спасибо за помощь, я не знал, что могу использовать = на месте, если НРАВИТСЯ. В чем разница? Я пишу алгоритм синтаксического анализа химических формул, поэтому мне нужно «угадать» текущий элемент как комбинацию текущего символа и следующего, что может привести к CO, Co, cO и co. – Dobob

+0

'Like' использует« регулярные выражения »(ну, ** вид **). В то время как '=' является строгой эквивалентностью (поэтому она быстрее **, потому что она делает одно сравнение). –

ответ

0

Попробуйте установить чувствительность к регистру встроенных в LIKE выражении ON перед выполнением вашего запроса

db.rawQuery("PRAGMA case_sensitive_like=ON", null); 

затем,

c = getContentResolver().query(element, null, PeriodicTable.SYMBOL + " LIKE? ", new String[]{guess}, "symbol"); 

позже вернуться прецедентным чувствительность LIKE к значение по умолчанию, OFF

db.rawQuery("PRAGMA case_sensitive_like=OFF", null); 

Дайте мне знать, если это поможет!

+0

Спасибо за ответ, я узнал, что поиск с учетом регистра использует «GLOB» вместо «LIKE». Я должен был бы сделать дополнительный код, если я использую rawQuery, так как я использую contentProvider для моей таблицы SQLite. Но если я использую «GLOB», мне это не нужно. – Dobob

Смежные вопросы