如何使用aCursor从数据库中读取一组记录?

时间:2018-09-01 11:15:21

标签: android sqlite group-by android-cursor

我有一个sqlite数据库表。我需要从该表中获取按date列分组的记录。这是我正在运行的查询:

select id as _id,sum(price) as price,sum(quantity) as quantity,sum(quantity*purchase_price) as cost,date from sales where date between '2018-08-24' and '2018-09-01' group by date order by date desc

这应该返回如下内容:

date            price        quantity        cost

2018-08-24      345          13              250
2018-08-26      425          15              450

这是从按日期分组的查询中返回的样本数据。这基本上是一份销售报告,告诉您在2018-08-24上获得$345,售出13物品并花费$250

我正在使用游标接收来自查询的结果,所以我得到了一个包含所有这些数据的游标对象。我的问题是如何从光标访问所有这些信息?

我尝试使用常规方式访问它:

cursor.getInt(cursor.getColumnIndexOrThrow("quantity"));
cursor.getInt(cursor.getColumnIndexOrThrow("price"));
cursor.getInt(cursor.getColumnIndexOrThrow("cost"));
cursor.getString(cursor.getColumnIndexOrThrow("date"));

,但这只会返回分组记录的第一行。只是第一个!

1 个答案:

答案 0 :(得分:0)

我认为您错过了光标结果的循环。您可以为结果创建一个列表,并将光标值添加到该列表中。也许这可以帮助您:

if (cursor.moveToFirst()) {

    do{

       //Get_sales_values_from_Cursor

       cursor.getInt(cursor.getColumnIndexOrThrow("quantity"));
       cursor.getInt(cursor.getColumnIndexOrThrow("price"));
       cursor.getInt(cursor.getColumnIndexOrThrow("cost"));
       cursor.getString(cursor.getColumnIndexOrThrow("date"));

       //move_to_next_row
    } while (cursor.moveToNext());
 }    

您甚至可以定义一个列表并向其中添加光标值,这样就可以将所有统计信息都包含在列表中。

最诚挚的问候。