2012-01-31 24 views
25

Tôi có 3 tên, Allakhazam, Beatbox và Cunning trong Bảng NAMES của tôi.Truy vấn cơ sở dữ liệu SQLite của Android với 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; 
} 

Tôi gọi hàm với "A" như bộ lọc, nhưng con trỏ của tôi là trả lại một số 0 khi nó ít nhất phải trả lại cho tôi một 1. Bất cứ ai cũng có thể nhìn thấy những gì xảy ra với mã?

Trả lời

75

tuyên bố này sẽ trả về tất cả các bản ghi có tên khóa bằng chuỗi được chỉ định theo chuỗi, nếu bạn sử dụng thẻ hoang dã, thì bạn có thể nhận được kết quả mong muốn. Giống như:

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

Sẽ liệt kê tất cả các bản ghi bắt đầu bằng từ trong bộ lọc.

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

Sẽ liệt kê tất cả các bản ghi chứa từ trong bộ lọc.

+0

Thanks, điều này đã làm nó cho tôi, tôi đang nhìn nhầm chỗ. – Maurice

+0

Điều này giúp tôi rất nhiều và cảm ơn bạn. –

+0

Tại sao chúng ta cần thêm biểu tượng% vào bộ lọc trong mã ở trên? @jeet –

2

Bạn nên cung cấp cho các bộ lọc với các kí hiệu;)

"A%" 
+0

android.database.sqlite.SQLiteException: gần "%": lỗi cú pháp:, trong khi biên dịch: CHỌN DISTINCT _id, nid, tên TÊN tên WHERE name LIKE%?% Nhận lỗi này khi tôi thêm "LIKE?%" – Maurice

+0

bạn cần để quấn dây của bạn với dấu nháy đơn – 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

Bạn có thể thử này ..... đang .......

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

Nếu không có mã ràng buộc tham số trở nên không an toàn với lỗ hổng SQL injection – Alfishe

+0

xin lỗi tôi không thể hiểu được. –

+2

Tôi sẽ chỉ chuyển bộ lọc = "tiêu chí% '; DROP DATABASE .....; SELECT * FROM bảng WHERE hàng LIKE'% criteria" – Alfishe

Các vấn đề liên quan