Значение и цель " = '1' " в запросе ContentResolver

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER " + " = '1''";
String[] selectionArgs = String.valueOf(1);

Почему мы ставим " = '1' " в запросе Selecion?

а также причина для String.valueOf(1);

1 ответ

Решение

Вы, вероятно, имели в виду это:

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{String.valueOf(1)};

или это

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = ?";
String[] selectionArgs = new String[]{"1"};

или это

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '1'";
String[] selectionArgs = null;

или только это

String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1";
String[] selectionArgs = null;

Все четыре выбора имеют одинаковые результаты: Контакты, которые имеют номер телефона.

SQLite (тип базы данных, который используется в Android) не поддерживает логические значения (см. Типы данных в SQLite версии 3), true а также false обычно хранятся как целые числа 1 а также 0, Итак, чтобы проверить, является ли логическое поле истинным, вы проверяете, имеет ли оно значение 1,

Фрагменты кода #1 и #2 используют подготовленный оператор, который содержит параметр или заполнитель, который заменяется первым значением selectionArgs массив (так как это первый параметр в запросе). Это метод защиты от внедрения SQL, который часто делает ваши запросы более удобочитаемыми.selectionArgs должен быть массивом String значения, поэтому целочисленное значение 1 во фрагменте № 1 необходимо преобразовать в String первый (используя String.valueOf(int) на самом деле имеет смысл только если вы передаете переменную, а не постоянное число).

Если вы не используете никаких переменных в своем операторе select, вы можете просто вставить все значения в оператор, не используя заполнители и selectionArgs как в фрагментах кода № 3 и № 4. Поскольку SQLite типизируется динамически, не имеет значения, проверяете ли вы равенство 1 или же '1'интерпретатор SQL все поймет правильно.

Другие вопросы по тегам