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

Bry*_*yen 3 sqlite android kotlin android-room

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

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

const val DELETE_BY_RESERVATION_CODE = "DELETE FROM ${TdaRoomDatabase.TABLE_REQUESTS} WHERE uri LIKE :reservationCode"
Run Code Online (Sandbox Code Playgroud)

以及同一个 DAO 中的 deleteRequest:

@Query(DELETE_BY_RESERVATION_CODE)
fun deleteRequest(reservationCode: String)
Run Code Online (Sandbox Code Playgroud)

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

在输入“DELETE FROM requests WHERE uri LIKE %”处没有可行的替代方案

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

 

Bry*_*yen 5

谢谢你的帮助!我找到了两种解决方案 - 一种在评论中进行了描述,它涉及在调用 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 || '%'"
Run Code Online (Sandbox Code Playgroud)