You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Room SQLite中带参数的LIKE删除语句失效问题求助

解决Room中LIKE语句通配符失效的问题

我之前也踩过这个Room的小坑!问题出在Room不会自动为绑定的参数添加LIKE所需的%通配符——你当前的SQL语句里,:reservationCode会被当作完整的匹配字符串,而不是模糊匹配的模式,所以自然找不到要删除的记录。

给你两种可行的解决方案:

方案1:在SQL语句中拼接通配符

直接利用SQLite的字符串连接操作符||,把%和参数拼接起来,这样Room在绑定参数时会自动把通配符整合到匹配模式里:

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

这种方式适合你固定需要前后模糊匹配的场景。

方案2:在调用方法时手动添加通配符

如果需要更灵活的匹配方式(比如前缀匹配、后缀匹配),可以在传入参数时手动加上%:

// 示例:前后模糊匹配
dao.deleteRequest("%$yourReservationCode%")

// 前缀匹配(uri以指定代码开头)
dao.deleteRequest("$yourReservationCode%")

// 后缀匹配(uri以指定代码结尾)
dao.deleteRequest("%$yourReservationCode")

额外注意事项

如果你的reservationCode可能包含SQLite的特殊匹配字符(比如%或_),记得要转义这些字符,否则它们会被当作通配符处理,导致匹配结果不符合预期。可以写个简单的工具方法来处理:

fun escapeLikePattern(rawPattern: String): String {
    return rawPattern.replace("%", "\\%")
                     .replace("_", "\\_")
}

// 使用示例
val safeCode = escapeLikePattern(userInputCode)
dao.deleteRequest("%$safeCode%")

内容的提问来源于stack exchange,提问作者Bryen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:24:56