Room:我可以检查传递值以查询NULL吗?

时间:2018-08-29 13:50:30

标签: android sql android-room

我正在使用Room库,具有DB Station,并想执行查询以获取具有/不具有过滤器的Station。

UPD。我有DAO,我想在我的数组(groupIds)为null或为空时获取所有记录,并且如果我在数组中的一个元素上有列表,则要获取过滤列表。

@Query("SELECT * FROM $STATIONS_TABLE_NAME WHERE ((:groupIds) IS NULL OR $GROUP_ID IN(:groupIds))
fun getStationsWithFilter(groupIds: IntArray?): Flowable<List<DbStation>>

此刻我遇到了一个问题

08-29 16:09:00.139 9508-9508/->BaseActivity: showError: exception - near ",": syntax error (code 1): , while compiling: SELECT * FROM Stations WHERE ((?,?,?,?,?,?,?,?,?,?) IS NOT NULL

所以

1)我可以检查要查询的空传递值并动态更改SQL查询吗?

2)如果是,我有什么语法问题?

1 个答案:

答案 0 :(得分:0)

交易在SQL查询的这一部分

WHERE ((:groupIds) IS NULL 

groupIds -是一个数组,我在那个地方有语法异常。

我的解决方法:我开始传递2个参数来查询而不是1个,第一个-字符串作为Nullable标志(我认为它可能是直接布尔值),第二个-用于第二个子句的Int数组。

@Query("SELECT * FROM $STATIONS_TABLE_NAME WHERE :nullableFlag IS NULL OR $GROUP_ID IN (:groupIds))
fun getStationsWithFilter(nullableFlag: String?, groupIds: IntArray?): Flowable<List<DbStation>>