很难找到这个答案,而且文档似乎没有回答这个问题。 如果我有一个基本的房间查询,
@Query("SELECT * FROM geotable WHERE geohash = :geohash")
abstract suspend fun getGeoTable(geohash: String) : GeoTable
并且没有这样的项目使用这个主键,会发生什么? Android studio 表示 DAO 对象永远不会返回 null。似乎只有当您使用我没有使用的 RxJava 的 Single 时才会抛出 EmptyResultSetException 。那么,当普通的旧 ROOM 什么也没找到时,它会抛出什么?
根据文档,无结果的查询的行为是由声明的返回类型定义的:
fun func(foo: Foo): Bar
会抛出 EmptyResultSetException
fun func(foo: Foo): Bar?
会回来null
fun func(foo: Foo): List<Bar>
将返回一个空列表如果根据您的条件没有找到任何内容,它将返回 null。
通过查看 Daos 代码是如何在相应的 *Dao_Impl 中生成的,您的 Daos 实现应该包含类似的内容:-
final GeoTable result;
if(_cursor.moveToFirst()) {
....
}else {
_result = null;
}
return _result;
}
因此,如果游标结果集中没有记录,则
_cursor.moveToFirst()
应返回 false,并最终返回 null。
实际上它返回NoSuchElementException。
如果没有结果 它什么也不返回 什么也没发生