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

Toe*_*Lie 12 database android android-sqlite android-room

我想使用公共常量变量Association.MEMBER_STATUS_APPROVED使用以下房间查询来查询用户关联列表。

@Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED)
LiveData<List<Association>> loadUserAssociations();
Run Code Online (Sandbox Code Playgroud)

但是,房间在构建时给了我 [SQLITE_ERROR]。可以通过用如下参数替换常量变量来重写该查询。

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
LiveData<List<Association>> loadUserAssociations(String statusApproved);
Run Code Online (Sandbox Code Playgroud)

我想知道 Room 是否支持这种字符串连接或字符串格式?(或)我可能遗漏了什么吗?

Sir*_*lov 6

对于遇到同样问题的人,Kotlin 中的解决方案如下:

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
loadUserAssociations(statusApproved: String = Association.MEMBER_STATUS_APPROVED): LiveData<List<Association>>
Run Code Online (Sandbox Code Playgroud)

我认为这是比硬编码或将明显的常量传递到函数中更干净的方法。


yeo*_*seo 0

  • 问题

如果你进行这样的查询,

"SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED

只是

“SELECT * FROM Association WHERE memberStatus = somevalue”

sql 无法知道“somvalue”是一个字符串。


  • 试试这个(用引号括起来)

“从协会中选择 * WHERE memberStatus = '” + Association.MEMBER_STATUS_APPROVED + “'”