2017-05-25 40 views
22

我试图做一个查询来搜索其名称包含文本的所有对象的选择查询: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 

如何解决这个问题?

回答

27

您应该在输入查询中附上%字符 - 而不是查询本身。

E.g.试试这个:

@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>> 
+0

它的工作原理!谢谢! –

+2

请注意,目前Kotlin的注释处理中存在一个参数名称的错误:https://youtrack.jetbrains.com/issue/KT-17959 –

50

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

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