Room SQLite Database - Удалить все, как LIKE%: param% - PullRequest
0 голосов
/ 02 мая 2018

У меня есть проблема с Room, из-за которой я не смог найти помощь в другом месте - обычный «%» для сопоставления любого количества символов при использовании «LIKE» в SQLite не работает с запросом на удаление Room, который мы используете в проекте моей команды.

У нас есть запрос на удаление, определенный как строка в Kotlin, в одном из наших DAO:

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

И запрос на удаление в том же DAO:

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

Однако после добавления символов процента вокруг ссылки на параметр: :servationCode мы получаем следующую ошибку:

Нет подходящей альтернативы при вводе 'УДАЛИТЬ ИЗ ЗАПРОСОВ, ГДЕ uri LIKE%'

Кто-нибудь знает, как использовать символ процента при использовании 'LIKE' в запросе Room DB? Моя команда и я (не очень хорошо разбирающиеся в SQL) ожидали, что он будет вести себя как SQLite, но, похоже, это не так!

1 Ответ

0 голосов
/ 02 мая 2018

Спасибо за вашу помощь! Я нашел два решения - одно было описано в комментариях, которое включает перенос входного параметра со значением «%» при вызове метода 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 || '%'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...