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)。

另外,您可以编写更少的代码来获得您想要的功能! :-)

【讨论】:

问题是,如果我要一个 RxJava Observable,如果不存在就不会发生任何事情 你不必使用Observable,你可以使用SingleMaybe 但是如果我的表中有很多记录,“EXISTS”查询将比获取所有内容更有效。 @mreichelt,如果函数的返回类型是非空 pojo 类型并且行不存在会发生什么。 @SouravKannanthaB 如果该行不存在,它仍然会返回一个空列表,无论 pojo 是否可以为空。它不会返回一个空列表,只是一个空列表。

以上是关于Room:如何检查行是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

如何快速检查 PySpark Dataframe 中是不是存在行?

如何在合并数据集之前检查行是不是存在(SQL Server)

Room - 检查最近是不是获取了数据

如何检查数据库中每个用户是不是存在行值

如何检查两个单词是不是是字谜

Shell如何检查文件中的一行中是不是存在模式