Android Room - Select query with LIKE
I'm trying to make a query to search all objects whose names contain text:
@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Messages:
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
Also I'm trying:
@Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Messages:
Error:Unused parameter: arg0
How to fix this?
You can just concat using SQLite string concatenation.
@Query("SELECT * FROM hamster WHERE name LIKE '%' || :search || '%'")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
You should enclose the %
characters in your input query - not in the query itself.
E.g. try this:
@Query("SELECT * FROM hamster WHERE name LIKE :arg0")
fun loadHamsters(search: String?): Flowable<List<Hamster>>
Then your String search
value should look like:
search = "%fido%";
loadHamsters(search);
Furthermore, the binding parameter name should match the variable name, so rather than arg0
it should look like:
@Query("SELECT * FROM hamster WHERE name LIKE :search")
fun loadHamsters(search: String?): Flowable<List<Hamster>>