2015-02-27 9 views
0

Просто пытаюсь использовать оператор IN в одном из моих запросов, но он возвращает только одну строку. Я знаю, что все идентификаторы, которые я передаю, имеют значения для них в базе данных. если я вызываю с идентификатором, возвращается правильная строка. Вот код, и он возвращает только одну строку. Не важно что.Android SQLite, где IN CLAUSE

List<Deals> tutorInfoList = null; 
    if(checkDataBase()) { 
     try { 

      String query = "SELECT id, " + 
        "name, " + 
        "coupon_background_image, " + 
        "coupon_background_image_data," + 
        "use_online," + 
        "coupon_download_btn_image," + 
        "coupon_download_btn_image_data," + 
        "deal_provider_id," + 
        "details," + 
        "feature_deal," + 
        "extra," + 
        "provider_name," + 
        "MIN(DATE(last_update_date)) as last_update_date," + 
        "start_date," + 
        "end_date, " + 
        "favourite FROM Deals where id IN (" + makePlaceholders(dealId.length) + ") order by feature_deal, MIN(DATE(last_update_date))"; 
      SQLiteDatabase db = SQLiteDatabase.openDatabase(DB_PATH + DB_NAME, null, SQLiteDatabase.OPEN_READWRITE); 
      Cursor cursor = db.rawQuery(query, dealId); 

      // go over each row, build elements and add it to list 
      tutorInfoList = new LinkedList<Deals>(); 

      if (cursor.moveToFirst()) { 
       do { 
        Deals cInfos = new Deals(); 
        cInfos.id = cursor.getString(0) == null ? -1 : Integer.parseInt(cursor.getString(0)); 
        cInfos.name = cursor.getString(1); 
        cInfos.coupon_background_image = cursor.getString(2); 
        cInfos.coupon_background_image_data = cursor.getBlob(3); 
        cInfos.use_online = cursor.getInt(4); 
        cInfos.coupon_download_btn_image = cursor.getString(5); 
        cInfos.coupon_download_btn_image_data = cursor.getBlob(6); 
        cInfos.deal_provider_id = cursor.getString(7) == null ? -1 : Integer.parseInt(cursor.getString(7)); 
        cInfos.details = cursor.getString(8); 
        cInfos.feature_deal = cursor.getInt(9); 
        cInfos.extra = cursor.getString(10); 
        cInfos.provider_name = cursor.getString(11); 
        cInfos.last_update_date = cursor.getString(12); 
        cInfos.start_date = cursor.getString(13); 
        cInfos.end_date = cursor.getString(14); 
        cInfos.favourite = cursor.getInt(15); 

        tutorInfoList.add(cInfos); 
       } while (cursor.moveToNext()); 

       cursor.close(); 
      } 
     } catch (Exception e) { 
      // sql error 
      e.printStackTrace(); 
     } 
    } 
    return tutorInfoList; 

String makePlaceholders(int len) { 
    if (len < 1) { 
     // It will lead to an invalid query anyway .. 
     throw new RuntimeException("No placeholders"); 
    } else { 
     StringBuilder sb = new StringBuilder(len * 2 - 1); 
     sb.append("?"); 
     for (int i = 1; i < len; i++) { 
      sb.append(",?"); 
     } 
     return sb.toString(); 
    } 
} 

Удивление, если кто-нибудь знает, почему это может произойти. Заранее спасибо.

+0

Решил проблему. Это была MIN (DATE (last_update_date)) как last_update_date, строка. Как только я удалю это, он работает нормально. – dogwasstar

ответ

0

Решил проблему. Это была MIN (DATE (last_update_date)) как last_update_date, строка. Как только я удалю это, он работает нормально.