2013-05-07 8 views
9

Chcę użyć przygotowanych instrukcji, aby zapobiec iniekcji sql w bazie danych SQLite Android. Jednak proces rawquery zawiesza się, gdy zapytanie zawiera numer Like i działa z Where name = ? czy istnieje sposób na użycie podobnych i przygotowanych instrukcji w db Android SQL?Android SQLite wybierz * z tabeli, której nazwa jak% key% za pomocą przygotowanych instrukcji.

Jest to zapytanie:

daje indeks wiązania lub kolumny z zakresu Dziękuję.

+0

można to sprawdzić w użyciu "Like" w zapytaniu SQL http://stackoverflow.com/questions/5752575/cant-use-like-clause-in-android-app –

+1

Jak będzie działać z rawquery, puszka publikujesz swój kod i logujesz się, abyśmy mogli zobaczyć, jaki błąd dostałeś ... – Vamshi

Odpowiedz

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

Dziękuję, sztuczka polegała na sprawdzaniu pustych ciągów. uratowałem mój dzień. w normalnych zapytaniach pusty ciąg nie powoduje problemu, ale z przygotowanymi instrukcjami IT TO. –

1

Spróbuj jak ..

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

Próbowałem go, wciąż ten sam problem. android.database.sqlite.SQLiteBindOrColumnIndexOutOfRangeException: indeks powiązania lub kolumny poza zakresem: uchwyt 0x1001a58 –

7

Spróbuj

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

Teraz brakuje "'" przed i po.

Powiązane problemy