如何在明天之后获得行数?

时间:2016-04-28 15:05:38

标签: android sqlite

我有一个SQLite数据库,其中包含一个包含dueDates列的任务表。我想过滤掉明天之后的日期。

如果明天的日期是4月29日,我应该知道明天的日期。我想得到明天之后的任务数量。

为此,我已将字符串转换为日期。格式为:

Calendar calendar = Calendar.getInstance();

dateToday  = calendar.getTime();
SimpleDateFormat df = new SimpleDateFormat("d MMM yyyy");
dueDateToday = df.format(dateToday);

calendar.add(Calendar.DAY_OF_YEAR, 1);
dueTomorrow = calendar.getTime();

dueDateTomorrow = df.format(dueTomorrow);

,查询是:

public int getPendingTasksLaterDays(String tomorrow) {
    ArrayList<Task> conList = new ArrayList<Task>();


    String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " + KEY_DUE_DATE + " > '" + tomorrow + "'" ;


    SQLiteDatabase db = this.getWritableDatabase();
    Cursor mCount= db.rawQuery(selectQuery,null);

    if (mCount.moveToFirst()) {
        do {

            count = mCount.getInt(0);
        } while (mCount.moveToNext());
    }

    Log.d("query",selectQuery);

    Log.d("count",String.valueOf(count));
    mCount.close();

    return count;
}

但查询对我不起作用。我得到的计数是0。 我做错了什么?

2 个答案:

答案 0 :(得分:1)

您的查询可以使用SQLite中的date函数查找明天之后的所有内容,但这假设您已至少以YYYY-MM-DD格式正确存储了截止日期列。 (其他格式在链接中)。

SELECT COUNT(*) FROM tasks WHERE due_date > date('now', '+1 day');

如果您没有在数据库中正确存储日期,那么,是的,您很可能会获得0结果。

还值得一提的是,您可以使用getCount方法从Cursor获取结果数,而无需COUNT(*)

int count = db.rawQuery(selectQuery,null).getCount();

答案 1 :(得分:0)

像这样更改您的查询

String selectQuery = "SELECT count(*) FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " +
        KEY_DUE_DATE + " > '" + tomorrow + "'" ;