Значение и цель " = '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 все поймет правильно.