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

chr*_*tel 19 sqlite android android-room

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

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

Run Code Online (Sandbox Code Playgroud)

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

小智 19

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

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


Asi*_*ade 4

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