Android Jetpack Compose Room:能否为查询方法添加方法体判断数据是否存在?
问题解答
不能直接给带有@Query注解的抽象Dao方法添加方法体——Room框架会为这类抽象方法自动生成实现代码,自定义方法体会和生成的代码冲突,导致编译错误。
不过可以通过两种方式实现你想要的“判断数据是否存在”的逻辑:
方法一:直接让查询返回布尔值(推荐)
修改SQL语句,用EXISTS关键字直接返回布尔结果,这也是性能最优的方式(找到匹配行就立即终止查询,无需统计所有符合条件的行数):
@Query("SELECT EXISTS(SELECT 1 FROM table WHERE data = :data)") fun isDataExist(data: String): Boolean
方法二:拆分方法,通过默认方法实现判断
先定义一个返回统计数的@Query方法,再在Dao接口中添加一个非抽象的默认方法来做判断:
@Query("SELECT COUNT(s_row) FROM table WHERE data = :data") fun countMatchingData(data: String): Int // Kotlin接口支持默认方法,Room不会为这个方法生成实现 fun isDataExist(data: String): Boolean { return countMatchingData(data) > 0 }
内容的提问来源于stack exchange,提问作者arist0v
相关产品推荐
相关产品推荐

