一个查询有两个目的

时间:2014-01-08 04:43:13

标签: android database sqlite cursor

我有以下两个问题:

一个。

db.query(DBHelper.TABLE, new String[] {
                DBHelper._ID, DBHelper._DATE_AND_TIME,
                DBHelper._SOURCE, DBHelper._MODE,
                "SUM(" + DBHelper._AMOUNT + ")" },
                DBHelper._DATE_AND_TIME + " BETWEEN ? AND ?",
                new String[] { date_min, date_max }, null, null, null, null);

和sum的结果会像这样

进入textview
 String.valueOf(cursor.getString(4)).

第二个查询B.

db.query(DBHelper.TABLE, new String[] {
            DBHelper._ID, DBHelper._DATE_AND_TIME,
            DBHelper._SOURCE, DBHelper._MODE,
            DBHelper._AMOUNT }, DBHelper._DATE_AND_TIME
            + " BETWEEN ? AND ?", new String[] { date_min, date_max },
            null, null, null, null);

结果转到

 adapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from,
            to, FLAG_AUTO_REQUERY);

我想要的是结合两个查询。首次查询后关闭游标,并对适配器使用相同的查询(A)。到目前为止,我已将DBHelper._AMOUNT添加到SELECT查询中,但ListView仅显示最后一个条目结果(不是整个数据)。如何修改查询A以在TextView中显示SUM,然后对适配器使用相同的查询。

1 个答案:

答案 0 :(得分:0)

在普通查询(如B)中,数据库返回与WHERE过滤器匹配的每个表记录的结果记录。

但是,当您使用像SUM()这样的聚合函数时,数据库会计算所有表记录中的单个值(如果您正在使用GROUP BY,则计算组中的所有记录)并将其作为单个结果返回记录。

因此,您的两个查询根本不同,不能合并为一个查询。

(请注意,查询A的前四个结果列没有任何有意义的值,因为结果记录不能保证与原始表中的任何特定记录相对应;您应该只询问SUM值。)