2011-03-03 25 views
28

Hola he pasado casi 2 horas tratando de averiguar por qué la instrucción LIKE no funciona y solo me dan este error: 03-03 11:31:01.770: ERROR/AndroidRuntime(11767): Caused by: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x89d9f8sqlite problema como en Android

En SQLiteManager Funciona perfectamente como esto: SELECT Word FROM Sign WHERE Word LIKE 'he%'; Pero cuando intento hacerlo desde Java, no funciona. Aquí se es mi consulta, he intentado en muchas maneras, pero sin suerte:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+" ?"+"%'", new String[]{name}, null, null, null); 

¿Alguna idea? Lo estoy haciendo mal o hay un error?

Gracias por su tiempo.

Respuesta

32

creo que no se debe utilizar selArgs para como tal manera. Usted puede probar esto:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word"+" LIKE '"+name+"%'", null, null, null, null); 

EDIT:

bien, si quieres estar a salvo de las inyecciones SQL, no utilizan la solución anterior, utilice esto:

Cursor cursor = m_db.query(MY_TABLE, new String[] {"rowid","Word"},"Word LIKE '?'", new String[]{name+"%"}, null, null, null); 
+0

Así es, funcionó! ¿Hay alguna explicación de por qué esto está sucediendo con la declaración LIKE? Gracias por la respuesta y que tengas un buen día. – madcoderz

+2

Creo que no puedes usar? con comillas, como lo hizo "Word LIKE '?%'". – Olsavage

+6

¿Y qué hay de la inyección de SQL? La respuesta de Jonas parece ser mejor. – James

56

La solución es realmente muy fácil. Solo incluya el% dentro de su selecciónArgs.

String []selectionArgs = {name + "%"}); 
+1

Esto funciona para mí. Esta solución es mejor que la respuesta de Olsavage porque no es vulnerable a la inyección SQL. – Kowlown

2

Otro - quizá más limpia - solución es utilizar el operador || como se describe aquí: Sqlite binding within string literal

+0

¡Esto pareció funcionar mejor para mí! Gracias. –

6

Ésta es la forma en que lo hice:

String []columns = {"_id", "name"}; 
String []selectionArgs = {name+"%"}; 
db.query(true,"mydb",columns,"name LIKE ?",selectionArgs,null,null,null);