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