Работа с конструкцией where

Работа с конструкцией 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.

  1. 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.

Поделиться в соц. сетях

Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс

Добавить комментарий