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: arg0Tambié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?
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 vinculación.
@Query("SELECT * FROM user WHERE user_name LIKE :name AND last_name LIKE :last") public abstract List<User> findUsersByNameAndLastName(String name, String last);Algunos ejemplos de palabras clave LIKE usando in dao con Room Database.
Empezar con Search_Query
@Query("SELECT * FROM hamster WHERE name LIKE :search_query || '%'") fun loadHamsters(search_query: String?): Flowable<List<Hamster>>Terminar con Search_Query
@Query("SELECT * FROM hamster WHERE name LIKE '%' || :search_query ") fun loadHamsters(search_query: String?): Flowable<List<Hamster>>Obtener todos los que tienen Search_Query
@Query("SELECT * FROM hamster WHERE name LIKE '%' || :search_query || '%'") fun loadHamsters(search_query: String?): Flowable<List<Hamster>>Use NOT LIKE para excepto los datos que tienen Search_Query
@Query("SELECT * FROM hamster WHERE name NOT LIKE '%' || :search_query || '%'") fun loadHamsters(search_query: String?): Flowable<List<Hamster>>Debe encerrar los caracteres % en su consulta de entrada, no en la consulta en sí.
Por ejemplo, prueba esto:
@Query("SELECT * FROM hamster WHERE name LIKE :arg0") fun loadHamsters(search: String?): Flowable<List<Hamster>> Entonces su valor String search debería verse así:
search = "%fido%"; loadHamsters(search); Además, el nombre del parámetro de enlace debe coincidir con el nombre de la variable, por lo que en lugar de arg0 debería verse así:
@Query("SELECT * FROM hamster WHERE name LIKE :search") fun loadHamsters(search: String?): Flowable<List<Hamster>>Simplemente puede concatenar usando la concatenación de cadenas SQLite.
@Query("SELECT * FROM hamster WHERE name LIKE '%' || :search || '%'") fun loadHamsters(search: String?): Flowable<List<Hamster>>