Próbuję wykonać zapytanie, aby przeszukać wszystkie obiekty, których nazwy zawierają tekst:
@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Wiadomości:
Error:no viable alternative at input 'SELECT * FROM hamster WHERE name LIKE %'
Error:There is a problem with the query: [SQLITE_ERROR] SQL error or missing database (near "%": syntax error)
Error:Unused parameter: arg0
Próbuję też:
@Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Wiadomości:
Error:Unused parameter: arg0
Jak to naprawić?
android
kotlin
android-room
Denis Buzmakov
źródło
źródło
Możesz po prostu połączyć za pomocą konkatenacji ciągów SQLite.
źródło
'%'
ale czy ktoś może wyjaśnić, co to jest'||'
i dlaczego?||
jest operatorem łączenia ciągów. Pomyśl o tym jak o+
Java String.Pokój obsługuje tylko nazwany parametr wiązania : nazwa, aby uniknąć nieporozumień między parametrami metody a parametrami wiązania zapytania.
Room automatycznie połączy parametry metody z argumentami bind. Odbywa się to poprzez dopasowanie nazwy parametrów do nazwy argumentów wiązania.
źródło