2010-08-28 12 views
8

Ich versuche weiterhin Wildcards in einer Suche in einer Android-App zu verwenden, und weiterhin in Fehler zu laufen.Wildcard funktioniert nicht in SQLite

ich eine Suche auf meine Anwendung Ausführen der Zeichenfolge unter Verwendung von:

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

wenn ich name LIKE %?% oder name=%?% ich eine „nahe‚% erhalten‘: Syntaxfehler:, beim Kompilieren: SELECT _id, name FROM namedxns WHERE name =%?% "Fehler.

aber mit name LIKE '%?%' oder name='%?%' I „out of range binden oder Spaltenindex: Griff 0x40cb70“ statt bekommen

mir jemand bitte sagen konnte, was mache ich falsch?

Danke!

+2

Was ist mit dem Hinzufügen des Platzhalters zu der übergebenen Variable, anstatt es in der Abfrage zu haben? –

+0

Funktioniert perfekt, danke! Das erscheint mir ein bisschen albern, aber egal. Ich würde mich freuen, Sie ankreuzen, wenn Sie es als Antwort setzen :) –

+1

Hört sich aber richtig an. Gebundene String-Parameter haben im Grunde genommen Anführungszeichen und so etwas, wie zB name =% 'David'%, was ungültiges SQL ist. Mein SQL-Wissen ist nicht ganz auf dem neuesten Stand, also gibt es hier etwas mehr Arbeit als das, was ich sagen kann, aber das sollte dir eine Idee geben, warum es so gemacht werden muss, wie OMG Ponies es beschreibt. –

Antwort

25

Den % an den Parameter query anhängen.

d.h .:

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

Wie Thomas Müller bereits gesagt, bitte beachten Sie, dass % und _ im Wert noch als Platzhalter arbeiten.

+0

der komplette Wert 'Abfrage' ist escaped und zwischen '', so muss Ihre% damit sein – njzk2

5

Folgendes sollten funktionieren (aber ich habe es nicht getestet mit SQLite):

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

Bitte beachten Sie, dass „%“ und „_“ im Wert noch als Platzhalter arbeiten.

+0

Danke, benutze CONCAT, damit es serverseitig funktioniert, aber in SQLite auf meinem Android-Gerät nicht funktionieren würde. Das war der richtige Weg, es für mich zu tun. – CounterFlame

+0

Wie fügt man "ODER" von oben hinzu? einfach hinzugefügt funktioniert nicht .. – Ryde

Verwandte Themen