2017-05-25 19 views
22

Tôi đang cố gắng để thực hiện một truy vấn để tìm kiếm tất cả đối tượng có tên chứa văn bản:Android phòng - Chọn truy vấn với NHƯ

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

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 

Ngoài ra tôi đang cố gắng:

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

Messages:

Error:Unused parameter: arg0 

Cách sửa lỗi này?

Trả lời

27

Bạn nên đính kèm các ký tự % trong truy vấn nhập của bạn - không phải trong chính truy vấn đó.

Ví dụ: thử này:

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

Sau đó, giá trị String search của bạn sẽ giống như thế:

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

Hơn nữa, tên tham số ràng buộc phải phù hợp với tên biến, vì vậy hơn là arg0 nó sẽ giống như thế:

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

Nó hoạt động! Cảm ơn! –

+2

Lưu ý rằng hiện tại có lỗi với tên tham số trong quá trình xử lý chú thích của Kotlin: https://youtrack.jetbrains.com/issue/KT-17959 –

50

Bạn chỉ có thể concat sử dụng chuỗi ký tự SQLite.

@Query("SELECT * FROM hamster WHERE name LIKE '%' || :arg0 || '%'") 
fun loadHamsters(search: String?): Flowable<List<Hamster>> 
Các vấn đề liên quan