【发布时间】:2019-02-01 09:48:46
【问题描述】:
我有以下带有查询的 DAO:
@Dao
public interface BaseballCardDao {
@Query(
"SELECT * FROM baseball_cards " +
"WHERE brand LIKE :brand " +
" AND year = :year " +
" AND number LIKE :number " +
" AND player_name LIKE :playerName " +
" AND team LIKE :team"
)
LiveData<List<BaseballCard>> getBaseballCards(
String brand, int year, String number, String playerName, String team
);
}
String 参数是“可选的”,因为LIKE 运算符我可以传递"%%" 来匹配所有行。但我不能用year 做到这一点,因为它是int。一种解决方案是添加两种不同的@Query 方法,一种带有int year 参数,另一种没有。有没有更优雅的方法来使用 Room 的 @Query 创建可选参数?
【问题讨论】:
-
如果
year是可选的,您的方法签名是什么?你会保留这个签名并使用一些神奇的year值来表示“忽略年份”吗?如果是这样,假设-1是您的魔法值,您也许可以执行AND (year = :year OR -1 = :year)之类的操作。 -
@CommonsWare 是的,保留签名和修改查询符合我的想法。你会把它作为答案发布吗?
标签: android dao android-room optional-parameters