我想使用公共常量变量 Association.MEMBER_STATUS_APPROVED ,通过以下会议室查询来查询用户关联列表。
@Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED)
LiveData<List<Association>> loadUserAssociations();
但是,在构建时,空间给了我[SQLITE_ERROR]。 可以通过将常量变量替换为如下参数来重写查询。
@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
LiveData<List<Association>> loadUserAssociations(String statusApproved);
我想知道Room是否支持这种字符串连接或字符串格式? (或)我可能会错过什么吗?
答案 0 :(得分:1)
您可以像下面这样查询。
代替
@Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED) LiveData<List<Association>> loadUserAssociations();
使用
@Query("SELECT * FROM Association WHERE memberStatus=${Association.MEMBER_STATUS_APPROVED}) LiveData<List<Association>> loadUserAssociations();
答案 1 :(得分:0)
如果您这样查询
“ SELECT * FROM Association WHERE memberStatus =” + Association.MEMBER_STATUS_APPROVED
就是
“ SELECT * FROM Association WHERE memberStatus = somevalue”
sql无法知道“ somvalue”是一个字符串。
“ SELECT * FROM Association WHERE memberStatus ='” + Association.MEMBER_STATUS_APPROVED +“'”
答案 2 :(得分:0)
对于那些有相同问题的人,以下可能是Kotlin中的解决方案:
@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
loadUserAssociations(statusApproved: String = Association.MEMBER_STATUS_APPROVED): LiveData<List<Association>>
我认为这比硬编码或将明显的常量传递给函数更干净。