2012-01-31 19 views
25

Mam 3 nazwy, Allakhazam, Beatbox i Cunning w mojej tabeli NAMES.Kwerenda SQLiteData bazy danych Android z 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; 
} 

I wywołania funkcji „a” jako filtr, ale mój kursor wraca do 0 gdy licznik powinien przynajmniej zwrócić mi 1. Każdy może zobaczyć, co się dzieje z kodem?

Odpowiedz

75

to polecenie zwróci wszystkie rekordy, których nazwa jest równa ciągowi określonym przez ciąg znaków, jeśli używasz karty wieloznacznej, możesz uzyskać pożądane wyniki. Na przykład:

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

Wyświetlane są wszystkie rekordy zaczynające się od słowa w filtrze.

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

Powoduje wyświetlenie wszystkich rekordów zawierających słowo w filtrze.

+0

Dzięki, to zrobił dla mnie patrzyłem w niewłaściwe miejsce. – Maurice

+0

To mi bardzo pomaga i dziękuję. –

+0

Dlaczego musimy dodać symbol% ​​do filtra w powyższym kodzie? @jeet –

2

należy podać filtr z symboli wieloznacznych;)

"A%" 
+0

android.database.sqlite.SQLiteException: near "%": błąd składni:, podczas kompilacji: WYBIERZ DISTINCT _id, nid, name Z nazw WHERE nazwa LIKE%?% Otrzymanie tego błędu, gdy dodaję "LIKE?%" – Maurice

+0

potrzebujesz do zawijania łańcuchów za pomocą pojedynczych cudzysłowów – 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

możesz spróbować tej ..... kodu .......

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

Bez kodu wiążącego parametr staje się niebezpieczny z podatności SQL injection – Alfishe

+0

Niestety nie mogę zrozumieć. –

+2

Po prostu przekażę filter = "kryteria%"; DROP DATABASE .....; SELECT * FROM table WHERE LIKE "% criteria" – Alfishe

Powiązane problemy