更新数据库中的项目,而不在ContentValues中设置所有列

时间:2011-01-16 16:44:15

标签: java android android-contentprovider

例如,我有四列:first_namelast_namephone_numberpicture。在我的代码的某处:

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_namelast_namepicture列具有与我第一次设置时相同的值。或者我是否也必须填充first_namelast_namepicture列?

3 个答案:

答案 0 :(得分:11)

要回答您的问题,是的,您只能将一个数据字段传递给更新,它会更新该列而不会影响其他任何内容。

您目前遇到的问题,从外观来看,您并没有告诉数据库要更新哪条记录。

根据更新方法:

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

您正在为方法的where部分传递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

答案 1 :(得分:0)

这将完全按照您的描述工作,只会更新设定值。

答案 2 :(得分:0)

您可以在update function 3rd parameter

中设置where子句
getContentResolver().update(tedUri, values, "first_name=?", new String
         [ ]{"name"});