ContentResolver имеет методы аналогичные
CRUD API, а именно
insert(),
query(),
delete(),
update().
Все четыре метода принимают первым параметром объект класса
Uri, который позволяет определить какой
ContentProvider будет использован.
Метод
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) – аналогичен запросу
SELECT в SQL и используется для получения данных.
Разберем параметры этого метода:
projection – массив имен колонок таблицы, которые будут возвращены в результате запроса.
selection – аналогичен
WHERE в SQL. Задает условие, по которому выбираются данные из таблицы, например:
"_id = ?".
selectionArgs – массив аргументов, которые используются в
selection. Каждый знак вопроса в строке
selection будет заменен на аргумент из массива
selectionArgs.
sortOrder – аналогичен
ORDER BY в SQL. Задает порядок, в котором будут возвращены результаты запроса. Например:
"_id ASC" – по возрастанию значения id.
Пример использования метода
query():
val projection = arrayOf("_id", "calendar_access_level", "visible")
val selection = "calendar_access_level = ? AND visible = ?"
val selectionArgs = arrayOf(Calendars.CAL_ACCESS_OWNER.toString(), "1")
val sortOrder = "_id ASC"
val result = query(Calendars.CONTENT_URI, projection, selection, selectionArgs, sortOrder)CAL_ACCESS_OWNER – константа, определяющая уровень доступа owner.
"1" для параметра
"visible" соответствует булевому значению
true.
Такой код соответствует следующему
SQL запросу:
SELECT id, calendar_access_level, visible, is_primary
FROM content://com.android.calendar/calendars
WHERE calendar_access_level=700 AND visible=1 AND is_primary=1
ORDER BY id ASC
Этот запрос возвращает все календари пользователя, к которым он имеет owner доступ. Далее
id календарей могут быть использованы для получения или добавления событий в пользовательский календарь.
В
предыдущем посте мы разобрали метод
query(), который используется для получения данных через
ContentResolver. Для изменения данных используются методы
insert(),
update(),
delete().
insert(url: Uri, values: ContentValues) вставляет строку (
row) в хранилище контент провайдера. Принимает вторым параметром объект
ContentValues, который содержит пары ключ-значение. Ключ соответствует имени столбца (
column) таблицы базы данных, в который записывается значение.
insert() возвращает
Uri созданной строки или
null, если строка не была создана.
update(uri: Uri, values: ContentValues, selection: String, selectionArgs: String[]) обновляет строки хранилища контент провайдера, которые соответствуют условиям
selection и
selectionArgs (как работают эти параметры смотрите в
предыдущем посте).
update() возвращает значение
int – количество обновленных строк.
delete(url: Uri, selection: String, selectionArgs: String[]) удаляет строки, которые соответствуют условиям
selection и
selectionArgs, и возвращает количество удаленных строк.
Примеры использования этих методов.