You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room数据库:@Upsert注解的返回值是什么?

Room @Upsert 注解的返回值说明

Room 的 @Upsert 注解返回的是 UpsertResult 类型(或其集合,当批量操作多个实体时),这个对象会同时封装插入和更新操作的结果信息:

  • insertedIds:List<Long> 类型,存储所有新插入行的 rowId
  • updatedRows:Int 类型,代表本次操作中被更新的行数

如果是对单个实体执行 Upsert 操作,你也可以选择让方法返回 Pair<Long?, Int>:第一个值是插入的 rowId(若为更新操作则返回 null),第二个值是更新的行数(若为插入操作则返回 0)。

举个代码示例:

@Dao
interface UserDao {
    // 单个实体操作,返回 UpsertResult
    @Upsert
    suspend fun upsertUser(user: User): UpsertResult

    // 批量操作,返回 UpsertResult 集合
    @Upsert
    suspend fun upsertUsers(users: List<User>): List<UpsertResult>

    // 单个实体操作,用 Pair 接收结果
    @Upsert
    suspend fun upsertSingleUser(user: User): Pair<Long?, Int>
}

和其他Room注解返回值的区别

  • @Insert:返回 Long(单个插入的 rowId)或 List(批量插入的 rowId 列表)
  • @Update/@Delete:返回 Int,代表受影响的行数
  • @Upsert:因可能同时包含插入、更新两种操作,所以用专门的 UpsertResult 对象整合两种结果,更清晰反馈操作细节

内容的提问来源于stack exchange,提问作者Bitwise DEVS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:22:02