Путаница в операциях CRUD ContentPorvider - PullRequest
0 голосов
/ 26 сентября 2018

Я новичок в contenProvider и читаю учебное пособие о том, как выполнять операции CRUD над UserDictionary.

Для запроса:

resolver.query(UserDictionary.Words.CONTENT_URI, projection, null, null, null);

Для вставки:

resolver.insert(UserDictionary.Words.CONTENT_URI, values); //ContentValues values = new ContentValues();

Для обновления:

Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
long noUpdated = resolver.update(uri, values, null, null);

для удаления:

long noDeleted = resolver.delete(Words.CONTENT_URI,
   Words.WORD + " = ? ", new String[]{"Zaphod"});

Моя путаница связана с операциями обновления и удаления.

В обновлении: почему используется Words.CONTENT_URI в сAppendedId () ?не следует ли использовать UserDictionary.Words.CONTENT_URI ?

Также при удалении: не используется withAppendedId ().Тем не менее, почему он использует Words.CONTENT_URI ?

1 Ответ

0 голосов
/ 26 сентября 2018

В вашем примере UserDictionary.Words.CONTENT_URI - это то, что идентифицирует данные в поставщике, поэтому местоположение данных, добавленный идентификатор - это то, что идентифицирует уникальную запись.

Итак, на ваших примерах:

1) Для Запрос использует UserDictionary.Words.CONTENT_URI для возврата всех записей по этому адресу Uri контента.Если вы хотите вернуть только одну конкретную запись, из которой вы уже знаете ее Id, то это также может быть следующим:

Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.query(uri, projection, null, null, null); 

3) Для Вставка , идентификатор не используется.потому что запись еще не существует.Операция заключается в вставке новой записи в базу данных, и возвращаемым значением будет новая запись Uri, которая будет содержать новый идентификатор.

3) Для Обновить ,добавленный идентификатор используется для определения, какая конкретная запись должна быть обновлена.Обновление UserDictionary.Words.CONTENT_URI без идентификатора записи приведет к обновлению всех записей.

4) Для Удалить в вашем примере удаляются все записи, где находится столбец Words.WORD.имеет значение "Zaphod", что может привести к удалению 0, 1 или нескольких записей.Если вы хотите удалить только 1 конкретную запись, из которой вы знаете ее Id, она будет выглядеть следующим образом:

Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.delete(uri, null, null);

Отвечая на ваш последний вопрос, между Words.CONTENT_URI * 1024 нет никакой разницы* и UserDictionary.Words.CONTENT_URI .Раздел UserDictionary является классификатором, который можно удалить, если он был добавлен в качестве импорта поверх файла Java, это позволяет не вводить его все время, но в конце оба на самом деле являютсято же самое и без разницы.

...