访问游标时出现异常

时间:2011-04-13 14:30:23

标签: java android sqlite

我的应用程序让用户将记录输入数据库。记录包含自动递增ID,日期(以mm-dd-yyyy格式的文本),数量(int)和一些其他字段。

我正试图抓住每个月的所有月份和总金额。所以我可以在我的应用程序中显示它们:2010年12月 - 90qty,2011年1月 - 45qty ......

我正在使用此查询来执行此操作:

return mDb.query("record", new String[] {KEY_ROWID, "strftime('%m-%Y', date)", "sum(quantity)"}, null, null, "strftime('%m-%Y', date)", null, null);

我相信查询很好但访问游标时出现异常。它说“日期”不是专栏。如果我将“date”从[]重命名为“dateA”,则异常显示为“dateA”不是列,因此我认为这会缩小问题范围。

Cursor c = mDbHelper.fetchReport();
    String[] from = new String[] { "date", "quantity" };
        int[] to = new int[] { R.id.text1, R.id.text2 };

        setListAdapter(new SimpleCursorAdapter(this, R.layout.basicrow, c, from, to) {
}

有什么想法吗?

更新:执行选择strftime('%m-%Y',日期)时,记录中的总和(数量);在adb shell中,它返回“:94”...数量是存在的(但是对于所有日期)但是日期不是。

当我输入时,从记录中选择strftime(日期),它返回所有日期(在此测试用例中为3)。当我输入时,从记录中选择strftime('%m-%Y',日期),它返回3个空白行。

1 个答案:

答案 0 :(得分:1)

我相信会发生以下情况。这是您的查询(简化):

select strftime('%m-%Y', date) from record

您执行选择日期列;您选择一个以列为参数的函数。在这种情况下,数据库会为结果集列分配一些任意名称,例如

STRFTIME_
05-2005
08-2009

如您所见,结果集中不存在日期列(就像错误所示)。

您需要尝试的是:

select strftime('%m-%Y', date) as date from record

select strftime('%m-%Y', date) as formatted_date from record

并使用'date'或'formatted_date'来引用结果集列。

P.S。

  

从中选择strftime('%m-%Y',日期)   记录,它返回3个空白行

这可能是另一个问题。如果indded日期存储为文本,则strftime()函数将不知道如何格式化它。

相关问题