android - 房间: could I check passing value to query for NULL?

标签 android sql android-room

我正在使用 Room 库,有数据库站,并且想要执行查询来获取带/不带过滤器的站。

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) 我可以检查是否有 null 传递值来查询和动态 chabge SQL 查询?

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

最佳答案

交易发生在 SQL 查询的这一部分

WHERE ((:groupIds) IS NULL 

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

我的解决方法:我开始传递 2 个参数来查询,而不是 1 个,第一个 - String 作为 Nullable 标志(我认为它可能是一个直接的 bool 值),第二个 - 第二个子句的 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>>

关于android - 房间: could I check passing value to query for NULL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52079052/

相关文章:

android - 通过 Internet 播放流时 MediaPlayer 错误 (1, -1004)

java - Android 中的 IllegalArgumentException

SQL Server NOLOCK 和联接

Android LiveData 列表未更新

android - 如何以及在何处关闭()我的数据库以停止获取 E/SQLiteLog : (283)

java - spinner1 无法解析或不是字段

java - Android:在库中使用 SharedPreferences

mysql - 如何从mysql的结果中删除十进制数字?

mysql - 在 phpmyadmin 中的表中插入值时如何进行制表符间距?

java - 当输入查询只是数据的一部分时,如何使用 Room 从数据库中获取数据?