在 SQL Brite 中,有一个方法 mapToOneOrDefault
。 Room中有类似的东西吗?
说出模型
@Entity(tableName = "users")
data class User(@PrimaryKey val name: String)
与道
@Dao
interface UserDao {
@Query("SELECT FROM users where name = :name")
fun getUserByName(name: String): Flowable<User>
}
如果数据库中没有 John
,则流不会为 getUserByName("John")
返回任何内容。有没有办法获取默认值,例如 User("")
?
最佳答案
Not the stream returns nothing for getUserByName("John") if there's no John in DataBase. Is there a way to get a default value, say User("")
没有默认机制。
您可以从 Flowable<User>
进行更改至Flowable<List<User>>
。如果没有用户,您将得到一个空列表。您可以使用 map
检查并返回默认值或 filter
+ switchIfEmpty
。
或者您可以从 Flowable
进行更改至Single
。与Single
,如果没有与您的查询匹配的行,onError
将被触发。然后您可以实现onErrorReturn
或onErrorResumeNext
返回默认值
关于android - Room - SELECT 查询、获取或默认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46952593/