2012-01-31 13 views
25

Ho 3 nomi, Allakhazam, Beatbox e Cunning nella mia tabella NAMES.query SQLiteDatabase Android 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; 
} 

chiamo la funzione con "A", come il filtro, ma il mio cursore restituisce un conteggio di 0 quando si dovrebbe almeno me una 1. Chiunque può vedere che cosa c'è di sbagliato con il codice di ritorno?

risposta

75

questa istruzione restituirà tutti i record il cui nome chiave è uguale alla stringa specificata da stringa, se si utilizza il carattere jolly, è possibile ottenere i risultati desiderati. Ad esempio:

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

Elenca tutti i record che iniziano con la parola nel filtro.

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

Elenca tutti i record contenenti la parola nel filtro.

+0

Grazie, questo ha fatto per me, stavo guardando nel posto sbagliato. – Maurice

+0

Questo mi aiuta molto e grazie. –

+0

Perché dobbiamo aggiungere il simbolo% al filtro nel codice sopra? @jeet –

2

Si dovrebbe dare il filtro con caratteri jolly;)

"A%" 
+0

android.database.sqlite.SQLiteException: near "%": errore di sintassi:, durante la compilazione: SELECT DISTINCT _id, nid, nome FROM nomi WHERE name LIKE%?% Ottenere questo errore quando aggiungo "LIKE?%" – Maurice

+0

necessario per avvolgere le stringhe con virgolette singole – 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

Puoi provare questo ..... codice .......

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

senza il codice di associazione parametri diventa pericoloso con la vulnerabilità di SQL injection – Alfishe

+0

scusa non riesco a capire. –

+2

Passerò semplicemente filter = "criteria%"; DROP DATABASE .....; SELECT * FROM tabella WHERE riga LIKE '% criteri " – Alfishe