Обновить элемент в базе данных без всех столбцов, установленных в ContentValues - PullRequest
4 голосов
/ 16 января 2011

Например, у меня есть четыре столбца: first_name, last_name, phone_number и picture. Где-то в моем коде есть:

ContentValues values = new ContentValues();
values.put(MyPerson.FIRST_NAME, "Ted");
values.put(MyPerson.LAST_NAME, "Johnson");
values.put(MyPerson.PHONE_NUMBER, "111-111-1111");
values.put(MyPerson.PICTURE, "file://tedpicture.jpeg");

getContentResolver().update(tedUri, values, null, null);

Могу ли я запустить что-то вроде:

ContentValues values = new ContentValues();
values.put(MyPerson.PHONE_NUMBER, "222-222-2222");

getContentResolver().update(tedUri, values, null, null);

И ожидайте, что столбцы first_name, last_name и picture будут иметь те же значения, что и при первом их установке. Или мне также нужно заполнить столбцы first_name, last_name и picture?

Ответы [ 3 ]

11 голосов
/ 16 января 2011

Чтобы ответить на ваш вопрос, да, вы можете передать только одно поле данных в обновление, и оно обновит этот столбец, не затрагивая другие.

Проблема, с которой вы сталкиваетесь в настоящее время, выне сообщает БД, какую запись вы хотите обновить.

В соответствии с методом обновления:

public int update (String table, ContentValues values, String whereClause, String[] whereArgs)

Вы передаете значение NULL для части метода метода.

Если вы передадите элемент where методу, он обновит только определенные записи.

ContentValues values = new ContentValues();
values.put(MyPerson.PHONE_NUMBER, "222-222-2222");
getContentResolver().update(tedUri, values, "first_name = ?", new String[] { "tom" });

Обновит кого-либо с именем tom иметь номер телефона 222-222-2222

0 голосов
/ 16 января 2011

Вы можете указать пункт where в функции обновления 3-й параметр

getContentResolver().update(tedUri, values, "first_name=?", new String
         [ ]{"name"});
0 голосов
/ 16 января 2011

Это будет работать точно так, как вы описали, будут обновлены только установленные значения.

...