Search code examples
androidkotlinandroid-room

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?


Solution

  • 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>>