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

Room SQLite Database - Delete all LIKE %:param%

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

在我们的一个 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”参数引用周围添加百分号后,我们得到以下错误:

No viable alternative at input 'DELETE FROM requests WHERE uri LIKE %'

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

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

我发现更优雅的解决方案是 Whosebug。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 || '%'"