【问题标题】:Room SQLite Database - Delete all LIKE %:param%Room SQLite 数据库 - 删除所有 LIKE %:param%
【发布时间】:2018-10-12 18:38:18
【问题描述】:

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

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

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

还有一个deleteRequest在同一个DAO中:

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

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

输入'DELETE FROM requests WHERE uri LIKE %'没有可行的替代方案

有人知道在 Room DB 查询中使用“LIKE”时如何使用百分号吗?我和我的团队(不精通 SQL)预计它的行为类似于 SQLite,但事实似乎并非如此!

 

【问题讨论】:

标签: android sqlite kotlin android-room


【解决方案1】:

感谢您的帮助!我找到了两种解决方案 - 一种在 cmets 中进行了描述,它涉及在调用 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 || '%'"

【讨论】:

  • 感谢用户yigit 的有用回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 2021-09-06
  • 2012-07-18
相关资源
最近更新 更多