Room:如何检查行是不是存在
Posted
技术标签:
【中文标题】Room:如何检查行是不是存在【英文标题】:Room: how to check whether row existsRoom:如何检查行是否存在 【发布时间】:2018-12-10 21:32:36 【问题描述】:在我的存储库类中,我只想在 Room 表中不存在数据时才获取数据。如何检查表中是否存在任何行?
【问题讨论】:
我不知道在房间里是否有一种优雅的方式。但是您可以查询该行并检查 null 结果。或者您可以使用COUNT()
。如果不存在行,计数将为 0。
如果你的 DAO 的 Rx 为 interface MyDao @Query("SELECT * FROM myTable") fun getAllEntries() : Single<List<Entries>>
,然后在你的 repo 中你可以有一个 flatMap if (it.isEmpty()) .. else ..
用于操作数据结构的订阅调用
【参考方案1】:
使用EXISTS
运算符,返回1表示true
,0表示false
。
如果您想检查某些特定行和某些条件,请执行以下操作:
@Query("SELECT EXISTS(SELECT * FROM tableName WHERE id = :id)")
fun isRowIsExist(id : Int) : Boolean
或者简单地使用这个:
@Query("SELECT EXISTS(SELECT * FROM tableName)")
fun isExists(): Boolean
【讨论】:
看起来你已经发布了正确的答案,但没有得到足够的支持。【参考方案2】:您可以使用EXISTS
运算符并只返回Boolean
:
@Query("SELECT EXISTS(SELECT * FROM table)")
fun hasItem(): Boolean
【讨论】:
能否提供更多详细信息如何使用此解决方案?【参考方案3】:正如 ADM 建议的那样,您可能会很幸运地使用 COUNT()
来计算表中的实际行数。
但是,我建议无论如何都只获取数据 - 如果不存在 Room 将简单地返回一个空列表,这不应该比询问行数效率低(如果它仍然是 0
)。
另外,您可以编写更少的代码来获得您想要的功能! :-)
【讨论】:
问题是,如果我要一个 RxJavaObservable
,如果不存在就不会发生任何事情
你不必使用Observable
,你可以使用Single
或Maybe
但是如果我的表中有很多记录,“EXISTS”查询将比获取所有内容更有效。
@mreichelt,如果函数的返回类型是非空 pojo 类型并且行不存在会发生什么。
@SouravKannanthaB 如果该行不存在,它仍然会返回一个空列表,无论 pojo 是否可以为空。它不会返回一个空列表,只是一个空列表。以上是关于Room:如何检查行是不是存在的主要内容,如果未能解决你的问题,请参考以下文章
如何快速检查 PySpark Dataframe 中是不是存在行?