我的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,但事实并非如此!
答案 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 || '%'"