2017-05-25 16 views
22

Ben isimleri içeren metin tüm nesneleri aramak için sorgu yapmaya çalışıyorum ile seç sorgusu:Android Odası - GİBİ

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

Mesajlar:

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 

Ayrıca deniyorum:

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

Mesajlar:

Error:Unused parameter: arg0 

Bu nasıl düzeltmek için?

cevap

27

Sen girdi sorgusunda % karakterleri örtmelidir - değil sorguda kendisi.

E.g. Bu deneyin:

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

Sonra String search değeri gibi görünmelidir:

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

Dahası, bağlama parametre adı değişken adı eşleşmelidir, dolayısıyla yerine arg0 olmadığı kadar gibi görünmelidir:

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

! Teşekkürler! KOTLIN ek açıklama işleme parametre adları ile bir hata şu anda olduğu –

+2

Not: https://youtrack.jetbrains.com/issue/KT-17959 –

50

yapabilirsiniz sadece SQLite dize birleştirme kullanarak concat.

@Query("SELECT * FROM hamster WHERE name LIKE '%' || :arg0 || '%'") 
fun loadHamsters(search: String?): Flowable<List<Hamster>> 
Çalışıyor
İlgili konular