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

5

我有一个与Room相关的问题,在其他地方找不到帮助。在使用SQLite中的“LIKE”时,通常的“%”不能与我们团队项目中使用的Room删除查询一起工作。

我们在Kotlin中定义了一个字符串形式的删除查询,在DAO中使用:

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 查询时如何使用百分号符号? 我和我的团队(不熟悉 SQL)预期它会像 SQLite 一样运作,但事实并非如此!

1
https://dev59.com/HFcP5IYBdhLWcg3wkK3U#44185385 - ADM
1
可能是重复的问题,参考Android Room - 带LIKE的SELECT查询 - earthw0rmjim
我们的输入查询基于网络响应中的字符串,我认为使用类似于"%" + input + "%"这样的方式来包围输入查询是相当丑陋的。 - Bryen
然而,我发现了一个更好的解决方案,它在DAO内部处理问题,而不是用“%”包装输入。 [更好的解决方案链接](https://dev59.com/AKLia4cB1Zd3GeqPeCDA) - Bryen
感谢您的帮助,我已经编辑了问题,以帮助任何遇到此问题的人。 - Bryen
1个回答

6

感谢您的帮助!我找到了两个解决方案-其中一个在评论中已经描述,涉及在调用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 || '%'"

1
感谢用户yigit提供的有用答案! - Bryen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接