【发布时间】:2020-12-22 12:53:18
【问题描述】:
很难找到这个答案,文档似乎没有回答这个问题。 如果我有一个基本的 ROOM 查询,
@Query("SELECT * FROM geotable WHERE geohash = :geohash")
abstract suspend fun getGeoTable(geohash: String) : GeoTable
并且没有这样的项目使用这个主键,会发生什么? Android Studio 说 DAO 对象永远不会返回 null。似乎 EmptyResultSetException 仅在您使用我不使用的 RxJava 使用 Single 时才被抛出。那么当普通的 old ROOM 一无所获时,它会抛出什么?
【问题讨论】:
-
无知的问题,但你为什么不能直接运行它并找出答案?
-
@a_local_nobody 好吧,我要过几个小时才能让代码再次编译,因为它处于工作进行中状态。因此,如果有人有简单的答案,很高兴知道我现在正在编码。
-
很公平,我只是在问,我认为只是运行它或为此进行快速示例应用程序/单元测试会快得多,而不必在这里等待答案
-
我的理解是如果没有结果数据库会抛出
EmptyResultSetException。但是如果有多个结果呢?你只会得到一个具有这种返回类型的。最好使用列表来优雅地处理所有情况,特别是因为您正在做SELECT *。 -
@Nicolas 据我了解, EmptyResultSetException 仅引发查询需要返回结果,如果它的返回类型类似于 RxJava 库中的 Single 。但我没有看到它的普通房间。我可以把结果变成一个列表,geohash 是一个主键。即使它应该只是一个项目,但基于查询,列表会更有意义。所以我假设如果它是一个列表,它将返回一个空列表。我可以使用它。
标签: android sqlite android-room