ContentPorvider CRUD 操作的困惑
Confusion in ContentPorvider's CRUD operations
我是 contenProvider 的新手,正在阅读有关如何对 UserDictionary 进行 CRUD 操作的教程。
查询:
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"});
我的困惑在于更新和删除操作。
更新中:为什么在 withAppendedId() 中使用 Words.CONTENT_URI ?它不应该使用 UserDictionary.Words.CONTENT_URI 吗?
也在删除中:它没有使用 withAppendedId()。仍然为什么它使用 Words.CONTENT_URI ?
在您的示例中,UserDictionary.Words.CONTENT_URI 用于标识提供者中的数据,因此数据位置、附加的 ID 用于标识唯一记录。
因此,根据您的示例:
1) 对于查询,是用UserDictionary.Words.CONTENT_URI到return这个内容Uri地址下的所有记录。如果你只想 return 一个特定的记录,从中你已经知道它的 Id,那么它也可以如下:
Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.query(uri, projection, null, null, null);
3) 对于Insert,没有使用Id,因为记录还不存在。该操作所做的是向数据库中插入一条新记录,return值将是新记录的Uri,其中将包含新的Id。
3) 对于Update,附加的Id 用于标识必须更新的特定记录。在没有记录 ID 的情况下更新 UserDictionary.Words.CONTENT_URI 将导致更新所有记录。
4) 对于 Delete,您的示例正在删除列 Words.WORD 具有值 "Zaphod" 的所有记录,这可能导致 0, 1,或多条记录被删除。
如果您只想删除 1 条您知道其 ID 的特定记录,那么它将如下所示:
Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.delete(uri, null, null);
回答你最后一个问题,Words.CONTENT_URI和UserDictionary.Words.CONTENT_URI没有区别。 UserDictionary 部分是一个限定符,如果已将其作为导入添加到 java 文件之上,则可以将其删除,这样就不必一直输入它,但最后两者实际上是一回事,没有区别。
我是 contenProvider 的新手,正在阅读有关如何对 UserDictionary 进行 CRUD 操作的教程。
查询:
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"});
我的困惑在于更新和删除操作。
更新中:为什么在 withAppendedId() 中使用 Words.CONTENT_URI ?它不应该使用 UserDictionary.Words.CONTENT_URI 吗?
也在删除中:它没有使用 withAppendedId()。仍然为什么它使用 Words.CONTENT_URI ?
在您的示例中,UserDictionary.Words.CONTENT_URI 用于标识提供者中的数据,因此数据位置、附加的 ID 用于标识唯一记录。
因此,根据您的示例:
1) 对于查询,是用UserDictionary.Words.CONTENT_URI到return这个内容Uri地址下的所有记录。如果你只想 return 一个特定的记录,从中你已经知道它的 Id,那么它也可以如下:
Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.query(uri, projection, null, null, null);
3) 对于Insert,没有使用Id,因为记录还不存在。该操作所做的是向数据库中插入一条新记录,return值将是新记录的Uri,其中将包含新的Id。
3) 对于Update,附加的Id 用于标识必须更新的特定记录。在没有记录 ID 的情况下更新 UserDictionary.Words.CONTENT_URI 将导致更新所有记录。
4) 对于 Delete,您的示例正在删除列 Words.WORD 具有值 "Zaphod" 的所有记录,这可能导致 0, 1,或多条记录被删除。 如果您只想删除 1 条您知道其 ID 的特定记录,那么它将如下所示:
Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
resolver.delete(uri, null, null);
回答你最后一个问题,Words.CONTENT_URI和UserDictionary.Words.CONTENT_URI没有区别。 UserDictionary 部分是一个限定符,如果已将其作为导入添加到 java 文件之上,则可以将其删除,这样就不必一直输入它,但最后两者实际上是一回事,没有区别。