首页 > 解决方案 > Room:查询失败的返回值是多少?

问题描述

考虑这个小型 Room 数据库:

@Entity
public class User {
    @PrimaryKey
    public int uid;
}

@Dao
public interface UserDao {
    @Query("SELECT * FROM user WHERE uid == :uid")
    User get(int uid);
}

数据库中不存在的UserDao.geta的返回值是多少?uid我可以可靠地测试没有给定的用户uid吗?像这样:

if (userDao.get(17) == null) {

还是不鼓励这样查询数据库?我是否应该总是返回一个列表,即使对于最多可以返回一个数据库行的查询?因此,应该UserDao如下所示:

@Dao
public interface UserDao {
    @Query("SELECT * FROM user WHERE uid == :uid")
    List<User> get(int uid);
}

标签: androidandroid-room

解决方案


如果您查询一个对象并且它不存在于 DB 中,则 Room 返回 null。所以你的方法没问题,但始终确保不要在主线程中调用你的数据库。如果您查询一个列表,如果没有找到匹配的对象,则返回一个大小为 0 的列表。


推荐阅读