Android '有什么用_id';在ContentUris.withAppendedId中

Android '有什么用_id';在ContentUris.withAppendedId中,android,sqlite,uri,android-contentprovider,Android,Sqlite,Uri,Android Contentprovider,我一直在努力更新SQlite数据库表中仅有的一行 尽管我在ContentUris.withAppendedId Uri中提供了要更新的行的_id值,但我仍然必须在update语句的“WHERE”部分检查记录的id是否相同 当我将update语句的“WHERE”-部分保留为“null”时,update语句将尝试更新表中的所有行,而不是仅更新具有所提供id的行。URI定义资源。它们不定义可以对该资源执行的操作 关于内容提供者< /> >(因为您已经将其包含在您的问题的标签中),您需要考虑使用“代码>

我一直在努力更新SQlite数据库表中仅有的一行

尽管我在ContentUris.withAppendedId Uri中提供了要更新的行的_id值,但我仍然必须在update语句的“WHERE”部分检查记录的id是否相同


当我将update语句的“WHERE”-部分保留为“null”时,update语句将尝试更新表中的所有行,而不是仅更新具有所提供id的行。

URI定义资源。它们不定义可以对该资源执行的操作

关于<代码>内容提供者< /> >(因为您已经将其包含在您的问题的标签中),您需要考虑使用“代码> >内容提供者< /代码>的应用程序,以及希望访问或修改其数据的应用程序可能不是同一个应用程序。如果您正在实现一个

ContentProvider
,那么您需要识别您提到的那种URI,并相应地调整WHERE子句,假设您在该资源上支持该操作


另一个用途是插入操作,其中返回的典型内容是刚刚插入的项的URI。例如,成功插入URI
content://authority/directory
将返回类似
content://authority/directory/_id
,其中_id是新插入行的id。

好的,很清楚。但是ContentUris.withAppendedID只允许访问一行,即具有给定id的行。那么,为什么我必须在update语句的选择部分检查它呢?Android不知道这个URI指向什么资源,它只知道它是一个资源。它不知道您在此资源上支持什么操作。它不知道末尾的数字是指行ID——它可能有其他含义。URI可以采用多种形式,并且有许多路径段,因此Android不做任何假设,开发人员负责实现所需的行为。根据ContentURI引用(),id是“前面路径部分标识的数据子集中一行的唯一数字标识符”。换句话说,它直接指向一个必须更新的记录,使得额外的“WHERE”检查对于我的意见来说是多余的。如果Android不知道末尾的数字指的是行ID,“withAppendedId”方法将完全无用。请阅读其余部分:“大多数提供商识别包含ID部分的内容URI并对其进行特殊处理。包含名为_ID的列的表通常期望ID部分是该列的特定值。”如果我不在我的桌子上使用_ID呢?Android对您的表或数据一无所知——它甚至不知道您是否在使用表和SQLite。您可以很好地读取URI,并使用一些完全不同的机制来读取/修改某些数据。没有假设,因为假设可能是错误的,而且常常是错误的。你给了我很多思考的机会!:)