Страницы

Поиск по вопросам

среда, 12 июня 2019 г.

Как работает selectionArgs в android и SQLite?

Почему при использовании selectionArgs меняется результат, вот два аналогичных запроса:
rawQuery("SELECT 2 < 1", null); // результат: 0 rawQuery("SELECT 2 < ?", new String[]{"1"}); // результат: 1
Вот пример кода:
Cursor cursor = bd.rawQuery("SELECT 2 < 1", null); if (cursor.moveToFirst()) { String value = cursor.getString(0); Log.d("test", "Query 1: " + value); } cursor.close();
Cursor cursor1 = bd.rawQuery("SELECT 2 < ?", new String[]{"1"}); if (cursor1.moveToFirst()) { String value = cursor1.getString(0); Log.d("test", "Query 2: " + value); } cursor1.close();


Ответ

Не работаю с Андроидом, но погуглив документацию, нашёл что
The values will be bound as Strings.
Как можно удостовериться, SELECT 2 < '1' выдаёт 1. Опять же, не знаю, насколько это правильно, но вы можете использовать CAST
SELECT 2 < CAST(? AS INTEGER)

Комментариев нет:

Отправить комментарий