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 || '%'"
我有一个关于 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 || '%'"