我正在使用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)如果是,我有什么语法问题?
答案 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>>