2011-04-13 76 views
1

我的应用程序让用户将记录输入数据库。记录包含自动递增的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); 

我相信查询好但在访问游标时出现异常。它说“日期”不是专栏。如果我将[日期]从[]重新命名为“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) { 
} 

任何想法?

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

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

+0

你能发布你的SqliteDatabaseHelper代码吗? – James 2011-04-13 14:38:08

+0

你有没有想过这个?我现在有这个相同的问题。 – Kalina 2011-07-22 21:54:49

回答

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 

,并使用 '日期' 或 'FORMATTED_DATE' 引用ResultSet列。

P.S.从 记录

选择的strftime( '%间%Y',日期),它返回3个空行

这可能是不同的问题。如果将日期标记为文本,则strftime()函数将不知道如何格式化它。

+0

当我尝试这些时,它会返回空白行的结果。我在列中有4个日期,它返回4个空白行。 – Roger 2011-04-13 15:13:35

+0

什么是日期字段的数据类型?你说的是真的吗?然后结果是有点可预测的:strftime与DATE类型,而不是字符串。 – 2011-04-13 17:43:27

相关问题