Работа с конструкцией where
Имеется два способа передачи конструкции where поставщикам контента:
• через URI;
• через комбинацию конструкции where и набора заменяемых аргументов строкового массива.
Мы рассмотрим оба этих способа на примерах.
Передача конструкции where через URI
Предположим, что требуется выбрать заметку с идентификатором 23 из базы заметок Google. Для извлечения из таблицы заметок курсора, содержащего одну строку с идентификатором 23, можно использовать код, приведенный в листинге 4.4.
Листинг 4.4. Передача SQL-конструкции where через URI
Activity someActivity;
// … инициализация someActivity
String noteUri = "content://com.google.provider.NotePad/notes/23";
Cursor managedCursor = someActivity.managedQuery( noteUri,
projection, // указание возвращаемых столбцов
null, // конструкция WHERE
null); // конструкция ORDER BY
Мы оставили значение null для аргумента конструкции where в методе managedQuery, т.к. в данном случае предполагается, что поставщик заметок достаточно интеллектуален, чтобы самостоятельно определить идентификатор нужной заметки. Этот идентификатор содержится в самом URI. Здесь URI используется как носитель конструкции where. Это будет понятно, если посмотреть, каким образом поставщик заметок реализует соответствующий метод запроса. Вот фрагмент кода для этого метода запроса:
// Извлечение идентификатора заметки из входящего URI
// вида content://…/notes/23
int noteld = uri.getPathSegments().get(1);
// Обращение к конструктору запросов для создания запроса.
// Указываем имя таблицы.
queryBuilder.setTables(NOTES TABLE NAME);
// Используем идентификатор заметки для помещения конструкции where.
- ID + "=" + noteld);
Обратите внимание на выборку идентификатора заметки из URI. В классе Uri, который представляет входящий аргумент uri, имеется метод для извлечения частей URI после корневой части content://com.google.provider.NotePad. Эти части называются сегментами пути, представляют собой строки между разделителями /, такие как /seg1/seg3/seg4/, и индексируются своими позициями. Для приведенного здесь URI первым сегментом пути является 23. Затем идентификатор сегмента 23 присоединяется к конструкции where, указываемой для класса QueryBuilder. В конечном итоге получается следующий оператор:
select from notes where id = 23
На заметку! Классы Uri и UriMatcher используются для идентификации URI и извлечения параметров из них. (Класс UriMatcher будет рассмотрен ниже в разделе “Определение URI с помощью класса UriMatcher”.) SQLiteQueryBuilder — это вспомогательный класс из android.database.sqlite, который позволяет генерировать SQL-запросы, выполняемые объектом SQLiteDatabase в экземпляре базы данных SQLite.
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.