2010-08-28 14 views
8

Continuo a provare a utilizzare i caratteri jolly in una ricerca in un'app per Android e continuo a incorrere in errori.Wildcard non funziona in SQLite

sto eseguendo una ricerca relativa alla mia domanda utilizzando la stringa qui sotto:

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

quando uso name LIKE %?% o name=%?% ottengo un% "vicino '': errore di sintassi:, durante la compilazione: SELECT _id, nome FROM namedrxns WHERE nome =%?% "errore.

ma con name LIKE '%?%' o name='%?%' ottengo invece "legare o di un indice di colonna fuori portata: gestire 0x40cb70"

Qualcuno potrebbe dirmi che cosa sto facendo male?

Grazie!

+2

Che ne pensi di aggiungere il carattere jolly alla variabile passata, piuttosto che averla nella query? –

+0

Funziona perfettamente, grazie! Mi sembra un po 'sciocco, ma non importa. Sarei felice di segnarti se lo metti come risposta :) –

+1

Suona comunque. I parametri di stringa vincolati avranno fondamentalmente delle virgolette e cose del genere, quindi potresti trovare qualcosa come name =% 'David'% che non è valido SQL. La mia conoscenza di SQL non è esattamente all'altezza, quindi qui c'è un po 'di lavoro in più rispetto a quello che posso dire, ma questo dovrebbe darti un'idea del perché debba essere fatto come i pony di OMG descrivono. –

risposta

25

Aggiungere il % al parametro query.

cioè .:

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

Come Thomas Mueller già detto, si ricorda che % e _ all'interno del valore ancora lavoro come jolly.

+0

il valore completo 'query' è sfuggito e messo tra '', quindi il tuo% deve essere con esso – njzk2

5

Di seguito dovrebbe funzionare (ma non ho la prova con SQLite):

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

Si prega di notare che "%" e "_" all'interno del valore funzionano ancora come wildcard.

+0

Grazie, CONCAT utilizzato per farlo funzionare su serveride, ma non funzionerebbe in SQLite sul mio dispositivo Android. Questo era il modo corretto di farlo per me. – CounterFlame

+0

Come aggiungere "OR" dall'alto? chiaramente aggiunto non funziona .. – Ryde