我用这个房间已经有一段时间了。我来自mysql的背景,您必须检查查询和其他内容的值。在room中,我发现这有点复杂,因为到目前为止,我可以将dao insert查询声明为void,或者只要返回rowId,如果返回long,我就必须编写一个侦听器来通知UI成功/失败。我的问题是,这是否必要?我是否需要insert/updates/deletes的返回值,或者这些查询是否保证成功?
我的问题是,这有必要吗?
这取决于并希望在下面得到更好的解释(至少有一点)。
我是否需要insert/updates/deletes的返回值,或者这些查询是否保证成功?不能保证他们会成功。但是,您可以假设他们拥有或使用冲突处理。
这在很大程度上取决于实体的编码方式,例如,假设您有一个带有id和名称的简单表(实体),为简单起见,您有autogenerate=true
,并且在插入时不允许指定id。除非数据库庞大(超出存储设备容量)或经过调整。将始终生成唯一的id。
如果名称需要是唯一的
,那么您将引入一个方面,使插入更可能无法成功。如果插入的onConflictStrategy
为IGNORE
,则复制不会失败,但您可能想知道是否未插入任何内容(-1返回)。
这只是一个方面。答案是,你需要考虑数据库和应用程序本身的设计。就我个人而言,我总是至少向用户通知异常/意外情况,这可能意味着是的,这是必要的(通常,禁止代码比添加新代码更容易)。
我在房间使用关系中添加了一对多关系。我引用这篇文章是为了编写以下房间关系代码。 这篇文章讲述了如何从数据库中读取值,但将实体存储到数据库中会导致用户ID为空,这意味着这两个表之间没有关系。 我不确定在具有用户ID值的情况下,将用户和宠物列表插入数据库的理想方法是什么。 1)用户实体: 2) 宠物实体: 3)用户带宠物POJO: 现在,为了从DB中获取记录,我们使用以下DAO: 编辑 我已创建此问题
在Room中添加新创建的对象时,自动生成主键,新创建的对象将保留其未定义的主键。当您需要修改此对象并保留更改时,这证明是不方便的。 让我们举个例子。 因此,让我们创建一个,其是自动生成的。 我们有以下Dao: 我们通过以下存储库进行交互: 所以,现在如果我们这样做,将不会被更新,因为将保持在0并且注释仅在主键已经存在的情况下更新行。 为了解决这个问题,我们可以将的方法更改为在插入后更新id。这个问
我正在使用room将前台位置服务获取的数据与an活动进行通信。服务连接到viewmodel并插入数据,但是活动不会从viewmodel接收更新的LiveData,但是它能够在开始时获取一个LiveData>对象,并且在重新启动应用程序时具有准确的大小。我错过了什么?我需要将新数据插入到数据库中,所以如果我确实需要在服务和postValue中使用MutableLiveData,那么我将不得不每次发布
所以我需要从插入函数中取回插入项目的ID。包括来自Google的消息来源在内的多个消息来源都表示,可以通过作为@插入带注释DAO函数的返回值的单执行此操作。不幸的是,编译总是以以下方式退出: 我试着改成也许 我的代码如下所示: 我完全不知道是什么导致了这一切。那么,我做错了什么?如果这只是一个bug,那么在我的活动和这个活动数据的上下文中获取id的解决方法是什么? 更新:找到了一个非常奇怪的解决方
我是Android的新手,需要一些帮助。 我的问题是我到底什么时候调用命令,以及room如何知道哪一行发生了更改?我不想更新到整个表。 如果我应该用另一种方式解释,请告诉我。
我需要更新,如果不存在插入行到ROOM DB。 我这样做: