Android室 – 使用LIKE选择查询

我试图做一个查询来搜索名称中包含文本的所有对象:

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

消息:

 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 

另外我试着:

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

消息:

 Error:Unused parameter: arg0 

如何解决这个问题?

您应该将输入查询中的%字符括起来,而不是查询本身。

例如试试这个:

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

那么你的String search值应该是这样的:

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

而且,绑定参数名称应该和变量名称相匹配,所以它应该看起来像这样,而不是arg0

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

您可以使用SQLite字符串连接进行concat。

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