java - 在没有在 ContentValues 中设置所有列的情况下更新数据库中的项目

标签 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 列吗?

最佳答案

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

您目前遇到的问题,从表面上看,您没有告诉数据库您要更新哪条记录。

根据更新方法:

public int update(String 表,ContentValues 值,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

关于java - 在没有在 ContentValues 中设置所有列的情况下更新数据库中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4706638/

相关文章:

java - 在已经检测过的文件上从 gradle 运行 jacoco

android - 如何避免总是从 Google Drive 加载缓存的应用数据

Android 内容解析器找不到新图像

java - Gradle : Task dependency tree ignored?

java - 在 java 中调用方法之前进行 null 检查的快捷方式

java - 从二进制文件将 2 字节(无符号短)转换为 Java 短

android - 无法从 Windows CMD 行检索 SHA-1 key

android - OpenCV 2.4.5 android, FeatureDetector, DescriptorExtractor

javascript - 从 PhoneGap JavaScript 访问 Android 上的 Content Provider

android - 如何获取平板电脑上所有用户的内容提供者列表