SQLite数据库 - 删除所有LIKE%:param%

时间:2018-05-02 15:25:14

标签: android sqlite kotlin android-room

我的Room有一个问题,我无法在其他地方找到帮助 - 在SQLite中使用'LIKE'时,匹配任意数量字符的常用'%'不适用于Room删除查询我们正在我团队的项目中使用。

我们在其中一个DAO中有一个在Kotlin中定义为字符串的删除查询:

const val DELETE_BY_RESERVATION_CODE = "DELETE FROM ${TdaRoomDatabase.TABLE_REQUESTS} WHERE uri LIKE :reservationCode"

同一个DAO中的deleteRequest:

@Query(DELETE_BY_RESERVATION_CODE)
fun deleteRequest(reservationCode: String)

但是,在':reservationCode'参数引用周围添加百分号后,我们会收到以下错误:

  

在输入'DELETE FROM requests WHERE uri LIKE%'

时没有可行的选择

在Room DB查询中使用'LIKE'时,是否有人知道如何使用百分号?我的团队和我(不精通SQL)期望它的行为像SQLite,但事实并非如此!

1 个答案:

答案 0 :(得分:3)

感谢您的帮助!我找到了两个解决方案 - 评论中描述了一个解决方案,其中包括用'%'来包装输入参数。在调用DAO方法时。

我发现更优雅的解决方案是stackoverflow.com/questions/44234644/android-rooms-search-in-string,它将输入选择器符号保存在DAO的查询字符串中,而不是将输入参数包装在调用DAO方法的任何地方。

这意味着DAO字符串最终看起来像这样:

const val DELETE_BY_RESERVATION_CODE = "DELETE FROM ${TdaRoomDatabase.TABLE_REQUESTS} WHERE uri LIKE '%' || :reservationCode || '%'"