Android Room – Sélectionnez la requête avec LIKE

J’essaie de faire une requête pour rechercher tous les objects dont les noms contiennent du texte:

@Query("SELECT * FROM hamster WHERE name LIKE %:arg0%") fun loadHamsters(search: Ssortingng?): Flowable<List> 

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 

Aussi j’essaye:

 @Query("SELECT * FROM hamster WHERE name LIKE '%:arg0%'") fun loadHamsters(search: Ssortingng?): Flowable<List> 

Messages:

 Error:Unused parameter: arg0 

Comment régler ceci?

Vous devez inclure les caractères % dans votre requête d’entrée – pas dans la requête elle-même.

Par exemple, essayez ceci:

 @Query("SELECT * FROM hamster WHERE name LIKE :arg0") fun loadHamsters(search: Ssortingng?): Flowable> 

Ensuite, votre valeur de Ssortingng search doit ressembler à ceci:

 search = "%fido%"; loadHamsters(search); 

De plus, le nom du paramètre de liaison doit correspondre au nom de la variable. Par conséquent, plutôt que arg0 il devrait ressembler à arg0 :

 @Query("SELECT * FROM hamster WHERE name LIKE :search") fun loadHamsters(search: Ssortingng?): Flowable> 

Vous pouvez simplement concaténer en utilisant la concaténation de chaînes SQLite.

 @Query("SELECT * FROM hamster WHERE name LIKE '%' || :arg0 || '%'") fun loadHamsters(search: Ssortingng?): Flowable>