是否可以在Android Room Query中使用StringFormat或Constant Variable

时间:2018-11-20 05:39:35

标签: android database android-sqlite android-room

我想使用公共常量变量 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是否支持这种字符串连接或字符串格式? (或)我可能会错过什么吗?

3 个答案:

答案 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>>

我认为这比硬编码或将明显的常量传递给函数更干净。