Android Room - 通过自动生成获取新插入行的 id

新手上路,请多包涵

这就是我使用 Room Persistence Library 将数据插入数据库的方式:

实体:

 @Entity
class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    //...
}

数据访问对象:

 @Dao
public interface UserDao{
    @Insert(onConflict = IGNORE)
    void insertUser(User user);
    //...
}

是否可以在上述方法本身中完成插入后返回 User 的 id 而无需编写单独的选择查询?

原文由 SpiralDev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

基于 此处 的文档(在代码片段下方)

使用 @Insert 注释的方法可以返回:

  • long 用于单次插入操作
  • long[]Long[]List<Long> 用于多个插入操作
  • void 如果你不关心插入的 id(s)

原文由 MatPag 发布,翻译遵循 CC BY-SA 4.0 许可协议

根据@Insert 注释的 文档 函数可以返回rowId。

如果@Insert 方法只接收1 个参数,它可以返回一个long,即插入项的新rowId。如果参数是数组或集合,则应返回 long[] 或 List

我遇到的问题是它返回rowId而不是id,我仍然没有找到如何使用rowId获取id。

编辑:我现在知道如何从 rowId 中获取 id。这是 SQL 命令:

 SELECT id FROM table_name WHERE rowid = :rowId

原文由 AndroidKotlinNoob 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题