【问题标题】:Exception when accessing cursor访问游标时出现异常
【发布时间】:2011-04-13 14:30:22
【问题描述】:

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

我正在尝试获取所有月份和每个月的总和。这样我就可以在我的应用中显示它们,例如:Dec 2010 - 90qty, Jan 2011 - 45qty...

我正在使用这个查询来做到这一点:

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

我相信查询很好,但访问游标时出现异常。它说“日期”不是一列。如果我将 from[] 中的“日期”重命名为“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), sum(quantity) from record;在 adb shell 中,它返回 ":94" ...数量存在(但是对于所有日期)但日期不存在。

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

【问题讨论】:

  • 你能发布你的 SqliteDatabaseHelper 代码吗?
  • 你有没有想过这个问题?我现在也遇到了同样的问题。

标签: java android sqlite


【解决方案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' 来引用结果集列。

附:

select strftime('%m-%Y', date) from 记录,它返回3个空白行

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

【讨论】:

  • 当我尝试这些时,它会返回空白行的结果。我在列中有 4 个日期,它返回 4 个空白行。
  • 日期字段的数据类型是什么?真的是你说的文字吗?然后结果有点可预测:strftime 适用于 DATE 类型,而不是字符串。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2012-11-03
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多