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);
错误出现了
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): Writing exception to parcel
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): android.database.sqlite.SQLiteException: near "group": syntax error: , while compiling: SELECT number, name, type FROM calls WHERE (group by CallLog.Calls.NUMBER) ORDER BY date DESC
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:91)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:64)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:80)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:46)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1345)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.database.sqlite.SQLiteQueryBuilder.query(SQLiteQueryBuilder.java:330)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at com.android.providers.contacts.CallLogProvider.query(CallLogProvider.java:130)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.content.ContentProvider$Transport.bulkQuery(ContentProvider.java:150)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:111)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at android.os.Binder.execTransact(Binder.java:288)
- 01-08 09:08:25.380: ERROR/DatabaseUtils(334): at dalvik.system.NativeStart.run(Native Method)
- 01-08 09:08:25.390: WARN/dalvikvm(1347): threadid=1: thread exiting with uncaught exception (group=0x40020800)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): FATAL EXCEPTION: main
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): android.database.sqlite.SQLiteException: near "group": syntax error: , while compiling: SELECT number, name, type FROM calls WHERE (group by CallLog.Calls.NUMBER) ORDER BY date DESC
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.content.ContentResolver.query(ContentResolver.java:245)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.app.Activity.managedQuery(Activity.java:1520)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at com.test.CopyOfTests.onClick(CopyOfTests.java:68)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.view.View.performClick(View.java:2408)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.view.View$PerformClick.run(View.java:8816)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.os.Handler.handleCallback(Handler.java:587)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.os.Handler.dispatchMessage(Handler.java:92)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.os.Looper.loop(Looper.java:123)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at android.app.ActivityThread.main(ActivityThread.java:4627)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at java.lang.reflect.Method.invokeNative(Native Method)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at java.lang.reflect.Method.invoke(Method.java:521)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
- 01-08 09:08:25.390: ERROR/AndroidRuntime(1347): at dalvik.system.NativeStart.main(Native Method)
看到这个错误后我很猥琐的想到了黑客的方法
现在的查询语句是
- 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);
Android managedQuery查询如果加入group by条件(及其猥琐的方法)相关推荐
- excel按条件查询mysql_Excel中实现多条件查找的15种方法
如下图所示,根据第9行的产品和型号,从上面表中查找"销售数量",结果如C10所示 1.SUM函数 公式{=SUM((A2:A6=A9)*(B2:B6=B9)*C2:C6)} 公式简 ...
- GROUP BY 条件查询最新时间记录
概述: 最近项目一个查询需求是从一个表中同一个IP多条记录的只获取一条IP记录,而这条IP记录要最新的.很明显需求没什么难,分组当然想到的是group by,但是这里是有个时间条件筛选的.虽然网上很多 ...
- android用于查询数据的方法,android: SQLite查询数据
掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...
- sql server排序慢_SQL 查询调优之 where 条件排序字段以及 limit 使用索引的奥秘
(给数据分析与开发加星标,提升数据技能) 作者:风过无痕-唐 www.cnblogs.com/tangyanbo/p/6378741.html 奇怪的慢sql 我们先来看2条sql 第一条: sele ...
- group by 分页 mysql_Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- 基于Android公交查询系统的设计与实现(论文+程序设计源码+数据库文件)
[摘 要]随着互联网的技术的不断更新发展,人们生活节奏也在不断的加快,对于网络的依赖也越来越紧密,尤其是在等公交,经常会错过班次,但又不知道,下次班次几点发车,这样会导致乘客花掉大把时间在等待,如果可 ...
- Android Gradle查询器
Android Gradle查询器 Gradle please 官网:http://gradleplease.appspot.com/ Gradle please是一个在线工具,它能帮助你找到Grad ...
- Django框架(11.Django中的通过模型类查询数据以及相关函数和条件)
Django中的查询函数 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 不管哪个函数注意返回值的类型 函数名 功能 返回值 说明 get 返回表中满足条件的 ...
- android contacts电话查询头像,android透过查询电话号码获取联系人头像
android通过查询电话号码获取联系人头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_c ...
最新文章
- MPB:深大李猛组-基于PacBio SMRT三代测序的红树林沉积物真菌群落的研究
- 我用Python爬取英雄联盟的皮肤,隔壁家的小弟弟都馋哭了
- 剑桥大学2020《AI全景报告》出炉,177页ppt
- 进程、线程和上下文切换
- 京东B2B业务架构演变阅读心得
- netbeans7.4_NetBeans 7.4 Beta提示警告无效的异常处理
- JavaScript代码片段
- python基础入门(8)之集合
- 从今天开始学习iOS开发(iOS 7版)-- 构建一款App之App开发过程 (二)
- Spring : Bean延时加载注解(@Lazy)
- Java编程思想 (1~10)
- 2003退休去世领了2年退休金没回本就死了能退吗?
- 微信小程序-制作购物车
- ​24小时企业级微信小程序全套开发视频教程
- WINDOWS 2008 R2 下安装usb转serial线缆驱动
- visio如何改变折线箭头拐弯方向
- 计算机网络实验二 VLAN间路由
- Java基础面试题简单总结
- Go:日志滚动(rolling)记录器 lumberjack 简介
- 跨模态行人重识别:Cross-Modality Person Re-Identification viaModality-Aware CollaborativeEnsemble Learning学习笔记