有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

访问游标时发生java异常

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

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

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

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

我相信这个查询很好,但是当访问游标时,我遇到了一个异常。上面写着“日期”不是一列。如果我将from[]中的“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) {
}

有什么想法吗

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    您不选择日期列;您可以选择一个将列作为参数的函数。在这种情况下,数据库会为resultset列指定一些任意名称,例如

    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”引用resultset列

    附言

    select strftime('%m-%Y', date) from record, it returns 3 blank rows

    这可能是不同的问题。若所标识的日期存储为文本,那个么strftime()函数将不知道如何格式化它