Estoy tratando de hacer una consulta para buscar todos los objetos cuyos nombres contienen texto:
@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Mensajes:
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
También estoy intentando:
@Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Mensajes:
Error:Unused parameter: arg0
¿Cómo arreglar esto?
android
kotlin
android-room
Denis Buzmakov
fuente
fuente
Puede simplemente concatizar usando la concatenación de cadenas SQLite.
fuente
'%'
pero, ¿alguien puede explicar qué es'||'
y por qué?||
es un operador de concatenación de cadenas. Piense en ello como+
en Java String.Room solo admite el parámetro de vinculación con nombre: nombre para evitar cualquier confusión entre los parámetros del método y los parámetros de vinculación de la consulta.
Room vinculará automáticamente los parámetros del método en los argumentos de vinculación. Esto se hace haciendo coincidir el nombre de los parámetros con el nombre de los argumentos de enlace.
fuente