内容解析器 - 如何使用查询对所有行的列值求和

时间:2016-08-09 10:55:10

标签: android android-contentprovider

我正在使用Content Provider for DB开展项目 我可以使用下面提到的查询来获取所有行 我的问题是我想为所有提取的行总结一列。

我在查询:

String query = WorkTable.ENTRY_TIME + " = ?"
String projection = "new String[]{WorkoutLogTable.STEPS}";
 Cursor cursor = getContentResolver()
                .query(
                        LogProvider.WORK_LOG,
                        projection,
                        query,
                        new String[]{dateString},
                        null
                );

我想要WorkoutLogTable.STEPS的总和。投影需要string[]作为参数,那么如何总结STEPS值?

修改

我使用了投影:

String projection = new String[]{"sum(WorkoutLogTable.STEPS}) as total"};

但它也没有用。

解决方案:

我把整个部分都作为字符串做错了 所以我已经解决了这个问题:

String projection = new String[]{"sum(steps) as total"}; // steps is my column name and I was fetching it by WorkoutLogTable.STEPS which was wrong

或者其他解决方案可以使用动态字符串(来自cricket_007回答)

2 个答案:

答案 0 :(得分:2)

  

投影需要string[]作为参数,

是的,那么为什么projection变量为String?这个陈述甚至都不会编译。

String projection = "new String[]{"sum(WorkoutLogTable.STEPS}) as total"};

也许你是这个意思?

String[] projection = new String[] { "sum(" + WorkoutLogTable.STEPS + ") as total" };

您需要使用实际的String[]对象,而不是String,其内容为"String[] { ... }"

String selection = WorkTable.ENTRY_TIME + " = ?"
String[] projection = new String[] { "sum(" + WorkoutLogTable.STEPS + ")" };
String[] selectionArgs = new String[] { dateString };

Cursor cur = getContentResolver().query(
                LogProvider.WORK_LOG, 
                projection, 
                selection, 
                null, null);

答案 1 :(得分:0)

这是来自其他应用的内容提供商吗?如果您正在编写内容提供程序,我建议您专门为摘要查询添加另一个URL,并在内容提供程序内的查询中执行sum函数。然后在浏览内容解析器时使用备用URL。