2010-08-28 10 views
8

Ciągle próbuję używać symboli wieloznacznych w wyszukiwaniu w aplikacji dla systemu Android, i ciągle pojawiają się błędy.Dzikie karty nie działają w SQLite

ja wykonując wyszukiwania w mojej aplikacji przy użyciu ciąg poniżej:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" }, 
       "name LIKE %?%", new String[] { query }, null, null, null); 

kiedy używam name LIKE %?% lub name=%?% dostaję „near«%»: błąd składni:, podczas kompilacji: SELECT _id, nazwa FROM namedrxns WHERE nazwa =%?% "błąd.

ale z name LIKE '%?%' lub name='%?%' dostaję zamiast „wiążą lub indeks kolumny z zakresu: obsługi 0x40cb70”

Może ktoś mi powiedzieć co robię źle?

Dzięki!

+2

Co powiesz na dodanie symbolu wieloznacznego do zmiennej, która jest przekazywana, zamiast umieszczania jej w zapytaniu? –

+0

Działa doskonale, dziękuję! Wydaje mi się to trochę głupie, ale nieważne. Byłabym szczęśliwa, gdybyś wybrała odpowiedź, jeśli uznasz to za odpowiedź :) –

+1

Brzmi nieźle. Parametry sznurka w zasadzie będą zawierać cytaty i rzeczy, więc możesz skończyć z czymś takim jak name =% 'David'%, który jest nieprawidłowym SQL. Moja znajomość SQL nie jest do końca odpowiednia, więc jest tu trochę więcej pracy niż to, co mogę powiedzieć, ale to powinno dać ci pojęcie, dlaczego musi to być zrobione tak, jak opisują kucyki OMG. –

Odpowiedz

25

Dodaj parametr % do parametru query.

tj .:

Cursor c_name = b.query("namedrxns", new String[] { "_id", "name" }, 
      "name LIKE ?", new String[] { "%"+query+"%" }, null, null, null); 

Podobnie jak Thomas Mueller już wspomniano, należy pamiętać, że % i _ w wartości nadal pracować jako symbole wieloznaczne.

+0

"Zapytanie" kompletnej wartości jest unikane i wstawiane między znakami '', więc twój% musi być z nim – njzk2

5

Poniższa powinien działać (ale nie testowałem go z SQLite):

"name LIKE '%' || ? || '%'" 

Należy pamiętać, że „%” i „_” w ramach wartości nadal pracować jako symbole wieloznaczne.

+0

Dzięki, użyłem CONCAT, aby działało na serwerze, ale nie działałoby w SQLite na moim urządzeniu z Androidem. To był właściwy sposób, aby to zrobić dla mnie. – CounterFlame

+0

Jak dodać "LUB" z góry? wyraźnie dodane nie działa. – Ryde

Powiązane problemy