Просто пытаюсь использовать оператор 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();
}
}
Удивление, если кто-нибудь знает, почему это может произойти. Заранее спасибо.
Решил проблему. Это была MIN (DATE (last_update_date)) как last_update_date, строка. Как только я удалю это, он работает нормально. – dogwasstar