【问题标题】:Android SQLite where IN CLAUSE在条款中的 Android SQLite
【发布时间】:2015-04-29 16:24:04
【问题描述】:

只是尝试在我的一个查询中使用 IN 子句,但它只返回一行。我知道我传入的所有 id 在数据库中都有它们的值。因为如果我用 ID 调用,则返回正确的行。这是代码,它只返回一行。不管怎样。

    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, 行。一旦我删除它似乎工作正常。

标签: android sqlite where-in


【解决方案1】:

解决了这个问题。它是 MIN(DATE(last_update_date)) 作为 last_update_date, 行。一旦我删除它似乎工作正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    • 2016-09-26
    • 2012-10-15
    • 2014-11-23
    • 2018-02-05
    • 2017-02-13
    相关资源
    最近更新 更多