【问题标题】:Room: could I check passing value to query for NULL?Room:我可以检查传递值以查询 NULL 吗?
【发布时间】:2018-08-29 13:50:30
【问题描述】:

我正在使用 Room 库,拥有 DB Stations 并希望执行查询以获取带有/不带过滤器的 Stations。

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

@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) 我可以检查 null 传递值以进行查询并动态查询 SQL 查询吗?

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

【问题讨论】:

    标签: android sql android-room


    【解决方案1】:

    交易发生在 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>>
    

    【讨论】:

    • 感谢您的回答。还有一个问题,如果不为 null 怎么办?
    • 快速研究,我们可以使用 where :field IS NOT NULL
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    相关资源
    最近更新 更多