2013-05-07 12 views
9

Desidero utilizzare le istruzioni preparate per impedire le iniezioni SQL sul database SQLite di Android. Tuttavia, rawquery si arresta in modo anomalo quando la query contiene Like e funziona con Where name = ? esiste un modo per utilizzare le istruzioni come e preparate in SQL SQLite db?SQLite Android selezionare * dalla tabella dove nome come% chiave% utilizzando le istruzioni preparate

Questa è la query:

dà un indice di vicolo cieco o una colonna fuori portata Grazie.

+0

si può controllare questo da usare "Mi piace" nella query SQL http://stackoverflow.com/questions/5752575/cant-use-like-clause-in-android-app –

+1

Come lavorerà con rawquery, può pubblichi il tuo codice e accedi in modo che possiamo vedere quale errore stai ricevendo ... – Vamshi

risposta

21
if (name.length() != 0) { 

     name = "%" + name + "%"; 
    } 
    if (email.length() != 0) { 
     email = "%" + email + "%"; 
    } 
    if (Phone.length() != 0) { 
     Phone = "%" + Phone + "%"; 
    } 
    String selectQuery = " select * from tbl_Customer where Customer_Name like '" 
      + name 
      + "' or Customer_Email like '" 
      + email 
      + "' or Customer_Phone like '" 
      + Phone 
      + "' ORDER BY Customer_Id DESC"; 

    Cursor cursor = mDb.rawQuery(selectQuery, null);` 
+0

Grazie, il trucco era controllare le stringhe vuote. mi ha salvato la giornata nelle normali query, la stringa vuota non causa problemi, ma con istruzioni preparate, ESSO. –

1

Try come ..

String[] a = new String[5]; 
a[0]  = '%' + criterion + '%'; 
a[1]  = '%' + criterion + '%'; 
a[2]  = '%' + criterion + '%'; 
a[3]  = '%' + criterion + '%'; 
a[4]  = '%' + criterion + '%'; 
Cursor cursor = database.rawQuery(sqlQuery,a); 
+0

L'ho provato, ancora lo stesso problema. android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: indice di bind o di colonne non compreso nell'intervallo: handle 0x1001a58 –

7

Prova

Cursor cursor = database.rawQuery(sqlQuery, new String[]{"'%" + criterion + "%'", 
    "'%" + criterion + "%'", 
    "'%" + criterion + "%'", 
    "'%" + criterion + "%'", 
    "'%" + criterion + "%'"}); 

Ti manca la prima "'" e dopo.

Problemi correlati