Android managedQuery查询如果加入group by条件(及其猥琐的方法)

下午研究了很久都没有找到如何在managedQuery方法里面加入group by 条件最后灵机一动!
想出了一个及其猥琐的方法解决此问题!

此时我的需求是查出Calllog中的号码!相同的自然只出一个结果!

正常的查询是这样的!


Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
                    new String[] { CallLog.Calls.NUMBER,
                            CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
                             null, null, CallLog.Calls.DEFAULT_SORT_ORDER);
            phoneCursor.moveToFirst();
            while (phoneCursor.getPosition() != phoneCursor.getCount()) {
                String number = phoneCursor.getString(phoneCursor
                        .getColumnIndexOrThrow(CallLog.Calls.NUMBER));
                String name = phoneCursor.getString(phoneCursor
                        .getColumnIndexOrThrow(CallLog.Calls.CACHED_NAME));
                Log.e(TAG, "name:" + name + "number:" + number);
                phoneCursor.moveToNext();
            }

此方法达不到过滤号码相同的!
于是首先想到的要过滤这个最好只在查询的时候就做查出结果后在遍历肯定效率存在问题!
但managedQuery貌似没有提供group by的入口!

首先想到的是在where 子句的入口

Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
                    new String[] { CallLog.Calls.NUMBER,
                            CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
                             "group by CallLog.Calls.NUMBER", null, CallLog.Calls.DEFAULT_SORT_ORDER);

但是这样运行时会出现异常

现在的查询语句是

SELECT number, name, type FROM calls WHERE (group by CallLog.Calls.NUMBER) ORDER BY date DESC
把它改装一下

SELECT number, name, type FROM calls WHERE (1=1)group by CallLog.Calls.NUMBER () ORDER BY date DESC

后面那个()会出现错误那我一不做二不休

SELECT number, name, type FROM calls WHERE (1=1) group by number --() ORDER BY date DESC

于是我成功的加入了group by查询

Cursor phoneCursor = this.managedQuery(CallLog.Calls.CONTENT_URI ,
                    new String[] { CallLog.Calls.NUMBER,
                            CallLog.Calls.CACHED_NAME, CallLog.Calls.TYPE },
                             "1=1) group by "+CallLog.Calls.NUMBER+" -- (", null, CallLog.Calls.DEFAULT_SORT_ORDER);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值