2012-01-31 15 views
25

Tengo 3 nombres, Allakhazam, Beatbox y Cunning en mi NAMES Table.consulta de Android SQLiteDatabase con LIKE

public Cursor fetchNamesByConstraint(String filter) { 

    mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] { filter }, null, null, null, 
      null); 

    return mCursor; 
} 

que llama a la función con "A" como el filtro, pero mi cursor está volviendo un recuento 0 cuando al menos un 1. Cualquier persona puede ver lo que está mal con el código debe volver?

Respuesta

75

esta declaración devolverá todos los registros cuyo nombre de tecla es igual a la cadena especificada por cadena, si utiliza la tarjeta salvaje, puede obtener los resultados deseados. Me gusta:

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] { filter+"%" }, null, null, null, 
      null); 

Will Lista todos los registros que comienzan con la palabra en el filtro.

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, KEY_NAME + " LIKE ?", 
      new String[] {"%"+ filter+ "%" }, null, null, null, 
      null); 

Will Lista todos los registros que contienen palabra en el filtro.

+0

Gracias, esto hizo para mí, estaba buscando en el lugar equivocado. – Maurice

+0

Esto me ayuda mucho y gracias. –

+0

¿Por qué tenemos que agregar% symbol al filtro en el código anterior? @jeet –

2

Debe dar el filtro con comodines;)

"A%" 
+0

android.database.sqlite.SQLiteException: cerca de "%": error de sintaxis:, al compilar: SELECT DISTINCT _id, nid, name FROM names WHERE name LIKE%?% Obtiene este error cuando agrego "LIKE?%" – Maurice

+0

que necesita para envolver sus cadenas con comillas simples – rsaxvc

3
public java.util.Vector<Products> getsearch(String subcategory,String searchby) 
    { 
     SQLiteDatabase db=this.getReadableDatabase(); 

     Cursor cursor = db.query(
      TABLE_PRODUCTS, 
      new String[] { SUBCATEGORY, MAIN_CATEGORY, PRODUCT_ID, PRODUCT_NAME, BRAND, PACKAGE_SIZE, PRICE }, 
      SUBCATEGORY + " LIKE '%" + subcategory + "%'", 
      null, null, null, null, null); 
    } 
4

¿Se puede probar este código ..... .......

public static final String KEY_ROWID="row"; 
public static final String KEY_NAME="name"; 

public Cursor fetchNamesByConstraint(String filter) { 

    Cursor cursor=mDb.query(true, DATABASE_NAMES_TABLE, null,"row LIKE '%"+filter+"%' or name LIKE '%"+filter+"%'",null, null, null, null); 

    } 
+2

Sin código de enlace de parámetros volverse inseguro con vulnerabilidad de inyección SQL – Alfishe

+0

lo siento, no puedo entender. –

+2

Voy a pasar filter = "criteria% '; DROP DATABASE .....; SELECT * FROM table WHERE row LIKE'% criteria" – Alfishe

Cuestiones relacionadas