Как использовать замену в android базе номеров sql? - PullRequest
0 голосов
/ 19 июня 2020
    @Query("update bookmarks set bookmarks_path= replace(bookmarks_path,:oldPath,:newPath) where bookmarks_path like :oldPath || '%'")
    fun updateBookmarksPath(oldPath: String, newPath: String): Completable

Я использую базу данных комнат, и это мой код

Я обнаружил, что формат этого кода неправильный при запуске, android studio подсказывает мне: ожидаемое выражение, got'replace '

вот так

enter image description here

Я хочу добиться такого эффекта

---- путь ------------------ путь

/ root / 1/1 -------------- / стек / 1/1

/ корень / имя / 1 ------ / стек / имя / 1

/ root / cls / 1 ----------- / stack / cls / 1

/ root / go / 1 ----------- / stack / go / 1

/ root / js / 1 ------------ / stack / js / 1

пожалуйста

1 Ответ

1 голос
/ 21 июня 2020

REPLACE одновременно является ключевым словом SQLite и, в случае вашего предполагаемого использования, именем строковой функции: replace () . Обработчик аннотаций Room, похоже, отклоняет вашу строку запроса, потому что он обрабатывает replace как ключевое слово вместо имени функции. Может быть, это ошибка?

Некоторые быстрые эксперименты показывают, что возможное решение - заключить replace в обратные кавычки, чтобы отметить это как имя (см. Ссылку на ключевое слово выше). Пожалуйста, попробуйте:

@Query("update bookmarks set bookmarks_path= `replace`(bookmarks_path,:oldPath,:newPath) where bookmarks_path like :oldPath || '%'")
fun updateBookmarksPath(oldPath: String, newPath: String): Completable
...