2017-05-25 56 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>>