2010-08-28 12 views
8

Intento seguir usando comodines en una búsqueda en una aplicación de Android y sigo teniendo errores.Comodín que no funciona en SQLite

estoy realizando una búsqueda en mi solicitud utilizando la cadena a continuación:

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

cuando uso name LIKE %?% o name=%?% llego a% " "cerca": error de sintaxis:, durante la compilación: SELECT _id, name FROM namedrxns WHERE name =%?% "error.

pero con name LIKE '%?%' o name='%?%' consigo en lugar de "atar o el índice de la columna fuera de rango: manejar 0x40cb70"

Podría alguien decirme lo que estoy haciendo mal?

Gracias!

+2

¿Qué tal agregar el comodín a la variable que se pasa, en lugar de tenerlo en la consulta? –

+0

¡Funciona perfectamente, gracias! Eso me parece un poco tonto, pero no importa. Estaría feliz de marcarlo si lo pones como una respuesta :) –

+1

Suena bastante bien. Los parámetros de cadena enlazados básicamente tendrán citas y cosas así, por lo que podrías terminar con algo como name =% 'David'% que es SQL no válido. Mi conocimiento de SQL no está exactamente a la altura, por lo que hay un poco más de trabajo aquí que lo que puedo decir, pero esto debería darle una idea de por qué tiene que ser hecho como describe OMG ponies. –

Respuesta

25

Agregue el % al parámetro query.

I.E .:

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

Al igual que Thomas Mueller ya se ha dicho, debe tenerse presente que % y _ dentro del valor todavía funcionan como comodines.

+0

el valor completo 'query' se escapó y se puso entre '', por lo que su% debe estar con él – njzk2

5

El siguiente debería funcionar (pero no he probado con SQLite):

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

Tenga en cuenta que "%" y "_" dentro del valor todavía funcionan como comodines.

+0

Gracias, usé CONCAT para hacerlo funcionar en el servidor, pero no funcionaría en SQLite en mi dispositivo Android. Esta fue la forma correcta de hacerlo por mí. – CounterFlame

+0

¿Cómo agregar "O" desde arriba? simplemente agregado no funciona ... – Ryde

Cuestiones relacionadas