可以在android房间查询中使用StringFormat或常量变量吗

可以在android房间查询中使用StringFormat或常量变量吗,android,database,android-sqlite,android-room,Android,Database,Android Sqlite,Android Room,我想使用公共常量变量Association.MEMBER\u STATUS\u APPROVED通过以下房间查询查询用户关联列表 @Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED) LiveData<List<Association>> loadUserAssociations(); @Query(“从关联中选择*,其中memberS

我想使用公共常量变量Association.MEMBER\u STATUS\u APPROVED通过以下房间查询查询用户关联列表

@Query("SELECT * FROM Association WHERE memberStatus = " + Association.MEMBER_STATUS_APPROVED)
LiveData<List<Association>> loadUserAssociations();
@Query(“从关联中选择*,其中memberStatus=“+Association.MEMBER\u STATUS\u APPROVED”)
LiveData loadUserAssociations();
但是,在构建时,room会给我[SQLITE_ERROR]。 可以通过使用如下参数替换常量变量来重新写入该查询

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
LiveData<List<Association>> loadUserAssociations(String statusApproved);
@Query(“从memberStatus=:statusApproved的关联中选择*)
LiveData loadUserAssociations(字符串状态已批准);
我想知道Room是否支持这种字符串连接或字符串格式?(或者)我可能遗漏了什么吗?

  • 问题
如果你提出这样的问题

“从memberStatus=“+Association.MEMBER\u STATUS\u APPROVED”所在的关联中选择*

只是

“从memberStatus=somevalue的关联中选择*”

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


  • 试试这个(用引号括起来)
“从memberStatus='“+Association.MEMBER_STATUS_APPROVED+'”的关联中选择*”


对于那些有相同问题的人,以下可能是Kotlin的解决方案:

@Query("SELECT * FROM Association WHERE memberStatus = :statusApproved")
loadUserAssociations(statusApproved: String = Association.MEMBER_STATUS_APPROVED): LiveData<List<Association>>
@Query(“从memberStatus=:statusApproved的关联中选择*)
loadUserAssociations(statusApproved:String=Association.MEMBER\u STATUS\u APPROVED):LiveData

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

您可以像下面这样查询

而不是

@Query(“从关联中选择*,其中memberStatus=“+Association.MEMBER\u STATUS\u APPROVED”)LiveData loadUserAssociations()

使用


@Query(“从memberStatus=${Association.MEMBER\u STATUS\u APPROVED}的关联中选择*)LiveData loadUserAssociations()

第二个应该可以用。有什么错误吗?是的,@DKV。第二个可以用。但是,我更喜欢第一个,我只想知道Room是否支持这种字符串连接或字符串格式。不,第一个类型不可能。谢谢@JeelVankhede。我认为Room应该支持这样:-D你觉得怎么样?:-)不,实际上不是t房间的错误,但您不能将变量传递给
注释
它必须是静态的最终值。我们可以在查询中使用枚举,如下面的“从status=STATES的表中选择*。RUNNING.ordinal()”我们可以在查询中使用枚举,如下面的“从status=STATES的表中选择*。RUNNING.ordinal()“不确定,但我希望您需要一个枚举转换器。因此,您的转换器可能如下所示:[at]TypeConverter fun-toEnum(value:MyEnum?=value?)。让{enumValueOf(it)}[at]TypeConverter fun-fromEnum(value:MyEnum?=value?)。name不确定它是否有效,但请尝试一下。