当前位置: 首页 > 知识库问答 >
问题:

获取/返回由Android Room数据库生成的自动生成id(作为主键)

朱保赫
2023-03-14

对于android房间界面,我想得到自动生成的id(作为刚刚插入的记录的主键),这样我就可以把它放在对象中,而不需要在插入后执行选择,如果没有其他选择,选择可能会返回错误的记录唯一属性,或这些记录类型的属性集。

例如,两个同名的人被插入到同一个表中。您可以说生成一个复合键来创建一个唯一的集。但是,这可能涉及添加其他情况下不需要的新字段。

我看过各种链接,包括下面的链接。有些人提到,如果插入方法声明为返回整数(或long)并成功,则返回的是行id。然而,我的理解是,行id不能被假设为与主键相同。(请参阅插入房间后的Rowid)。我不能评论任何帖子,因为我没有足够的声誉点。我感谢任何关于什么是解决这个问题的好/典型方法的评论。

以下是我看过的帖子:

Android Room-自动生成新插入行的ID

https://developer.android.com/training/data-storage/room/accessing-datahttps://commonsware.com/AndroidArch/previews/the-dao-of-entities

共有1个答案

长孙景天
2023-03-14

迟交的答案只适用于将来看到这个问题的人

从SQLite文档中可以看出:

rowid表的主键(如果有)通常不是表的真正主键,因为它不是底层B树存储引擎使用的唯一键。此规则的例外情况是rowid表声明整数主键。在例外情况下,整数主键将成为rowid的别名。

因此,假设插入查询返回的rowId与自动递增主键相同是正确的

 类似资料:
  • 问题内容: 有人知道如何从1开始生成,以便下一个对象具有2,依此类推吗? 我尝试了以下方法,但不起作用: 问题答案: 您需要一个 静态的 类成员来跟踪上次使用的索引。确保还实现一个复制构造函数: 更新: 正如@JordanWhite建议的那样,您可能希望使static计数器成为 atomic ,这意味着可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为: 增量读取和复位操作变为:

  • 本文向大家介绍如何获取自动生成的(主)键值?相关面试题,主要包含被问及如何获取自动生成的(主)键值?时的应答技巧和注意事项,需要的朋友参考一下 insert 方法总是返回一个 int 值 ,这个值代表的是插入的行数。 如果采用自增长策略,自动生成的键值在 insert 方法执行完后可以被设置到传入 的参数对象中。 示例:

  • 问题内容: 我正在使用JPA(EclipseLink)和Spring。假设我有一个带有自动生成的ID的简单实体: 在我的DAO类中,我有一个调用此实体的insert方法。我希望该方法为新实体返回生成的ID,但是当我对其进行测试时,它将返回。 我还有一个包装DAO的服务类,如果有区别的话: 问题答案: 该ID仅保证在刷新时生成。持久实体只会使它“附加”到持久性上下文。因此,要么显式刷新实体管理器:

  • 我需要firebase来存储任何模型的自动增量Id数据,我应该做什么?

  • 问题内容: 我有一个带有id(guid)列的sql表。如何强制数据库为每条新记录自动生成新的Guid? 问题答案: 添加。