SQLite通过

时间:2016-12-09 13:13:40

标签: android database sqlite date strftime

我正在网上搜索找到满足这种需求的解决方案: 我需要按月收集'amout'数据组的总和。

我发现的是这个要求:

Cursor cursor = mDb.rawQuery("SELECT strftime('%m', date), SUM(amount) FROM " + DATABASE_TABLE + " GROUP BY strftime('%m', date)", null);

但是我拉我的头发,因为我无法从这个函数中收集任何月份strftime('%m', date);

我在网上发现,这可能来自我的数据库中的日期格式,该功能无法理解。

我的数据库中存储的实际日期是:“Thu Dec 01 00:00:00 GMT + 00:00 2016”

我使用此光标检查返回的值:

Cursor cursor = mDb.rawQuery("SELECT distinct date, strftime('%m', date) FROM " + DATABASE_TABLE, null);

在光标中(仅检查光标的第一次检查)我有:

  • cursor.getString(0)= Thu Dec 01 00:00:00 GMT + 00:00 2016
  • cursor.getString(1)= null

所以我正确地收集了日期,这是转换不起作用。

编辑: 正如提议和解释的那样,我认为这种格式可能会被函数误解(显然情况就是这样)。

这是我向数据库添加日期的方法: 我用这个:dateFormat = new SimpleDateFormat("dd/MM/yyyy");

然后这一行将日期添加到我的Money对象,然后将其保存到数据库中:dateFormat.parse("01/12/2016")

你能帮帮我吗? 感谢。

1 个答案:

答案 0 :(得分:1)

感谢Rotwang带我了解格式问题,我的问题出现在我的数据库项目创建者

当我创建我的对象时,我只是把日期存储在我的类中(java.util.Date日期),而没有形成它。

所以日期总是以错误的格式存储。我必须在创建阶段格式化它。下面是创建我的对象并解决我的问题的代码。

dateFormat = new SimpleDateFormat("yyy-MM-dd");再次感谢Rotwang

并且:

public void createMoney(Money money) {
        ContentValues values = new ContentValues();

        values.put(TITLE, money.get_title());
        values.put(AMOUNT, money.get_amount());
        values.put(DETAILS, money.get_details());
        values.put(DATE, dateFormat.format(money.get_date()));
        values.put(TYPE_FK_ID, money.get_typeFkId());
        values.put(CONTACT_FK_ID, money.get_contactFkId());
        values.put(REMINDER_FK_ID, money.get_reminderFkId());

        mDb.insert(DATABASE_TABLE, null, values);
    }