2014-05-20 2 views
0

관련 단어가 들어있는 제품 이름을 검색하려면 'like'를 사용하여 해당 제품을 표시하지 않습니다.SQLite LIKE 검색

String sql = "SELECT "+WPTemplateDB.PRODUCT_TABLE+".*" 
        +" FROM "+WPTemplateDB.PRODUCT_TABLE+" product" 
        +" JOIN "+WPTemplateDB.CATEGORY_TABLE+" cat" 
        +" ON product."+WPTemplateDB.PRODUCT_ID+"= cat."+WPTemplateDB.PRODUCT_ID 
        +" WHERE "+column+" "+(column==WPTemplateDB.TITLE?"LIKE":"=")+" ?"; 
     Log.d("sql", sql); 
     Log.d("query",(column==WPTemplateDB.TITLE?("%"+query+"%"):query)); 
     Cursor cursor = db.rawQuery(sql, new String[]{(query==WPTemplateDB.TITLE?"%"+query+"%":query)}); 
     Log.d("count", cursor.getCount()+""); 
     if (cursor.getCount()>0){ 
      while (cursor.moveToNext()){ 
       Log.d("product", cursor.getInt(cursor.getColumnIndex(WPTemplateDB.PRODUCT_ID))+""); 
       Product product = new Product(cursor.getInt(cursor.getColumnIndex(WPTemplateDB.PRODUCT_ID)), db); 
       gridProduct.add(product); 
      } 

      return gridProduct; 
     } else { 
      return new ArrayList<Product>(); //avoid returning null 
     } 

난 그냥 문자로 제목을 검색 'A', 로그가 올바르게 %로 %를 변환 표시하지만 카운트가 밖으로 0 온다 (이것은 확실히 '제품'은을 가진 제목을 '존재)하는 아무것도 찾지 않습니다 ........ '='이 아니라 ''같이 ''와 함께 올 때 작동합니다! 왜?? 그것은이 라인과 같은

답변

1

이 올바르지 않습니다 : 당신이 코드의 이전 라인에 있던대로이 같은 WPTemplateDB.TITLE에 을 비교해야

Cursor cursor = db.rawQuery(sql, new String[]{(query==WPTemplateDB.TITLE?"%"+query+"%":query)}); 

:

Cursor cursor = db.rawQuery(sql, new String[]{(column==WPTemplateDB.TITLE?"%"+query+"%":query)}); 
+0

내가 어리석은 실수를 저질렀다. XD, thx – Simon