如果查询没有结果,Room 会返回什么

问题描述 投票:0回答:5

很难找到这个答案,而且文档似乎没有回答这个问题。 如果我有一个基本的房间查询,

@Query("SELECT * FROM geotable WHERE geohash = :geohash")
abstract suspend fun getGeoTable(geohash: String) : GeoTable

并且没有这样的项目使用这个主键,会发生什么? Android studio 表示 DAO 对象永远不会返回 null。似乎只有当您使用我没有使用的 RxJava 的 Single 时才会抛出 EmptyResultSetException 。那么,当普通的旧 ROOM 什么也没找到时,它会抛出什么?

android sqlite android-room
5个回答
19
投票

根据文档,无结果的查询的行为是由声明的返回类型定义的:

  1. fun func(foo: Foo): Bar
    会抛出
    EmptyResultSetException
  2. fun func(foo: Foo): Bar?
    会回来
    null
  3. fun func(foo: Foo): List<Bar>
    将返回一个空列表

3
投票

如果根据您的条件没有找到任何内容,它将返回 null。


0
投票

通过查看 Daos 代码是如何在相应的 *Dao_Impl 中生成的,您的 Daos 实现应该包含类似的内容:-

final GeoTable result;
if(_cursor.moveToFirst()) {
   ....
}else {
    _result = null;
    }
return _result;
}

因此,如果游标结果集中没有记录,则

_cursor.moveToFirst()
应返回 false,并最终返回 null。


0
投票

实际上它返回NoSuchElementException。


-3
投票

如果没有结果 它什么也不返回 什么也没发生

© www.soinside.com 2019 - 2024. All rights reserved.