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);
时间: 2024-07-29 20:44:56

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

android splite查询条件

问题描述 android splite查询条件 我建了一个表,主键是系统的那个_id自动增加,还有两个数据id和style,其实我是想把id设为主键但网上都说用系统的好我就这么建的.问题是我要用id查询数据但是数据查询不出来,用__id当查询条件就能查出来.请问怎么用id查,把它设为唯一键可以吗 解决方案 _id字段设置成主键后自增,系统默认处理的. 如果用自己id做主键,可以id INTEGER PRIMARY KEY AUTOINCREMENT,这等价于_id INTEGER PRIMARY

java-条件查询可以实现,但是条件保存仍无法实现

问题描述 条件查询可以实现,但是条件保存仍无法实现 这是页面中条件查询的部分,可以实现 状态: <div class="search01"> 类型:<s:select id="type" name="qm.type" cssClass="text01" headerKey="" headerValue="----请选择----" list="#{'...'}&

数据-android 地铁查询怎么查,接口在哪里找呢

问题描述 android 地铁查询怎么查,接口在哪里找呢 比如查询广州地铁,貌似不提供接口啊,数据或功能都是从哪里来了,我现在在做这方面,接口都没有.. 解决方案 你还是选择跟人家谈谈合作吧,这类接口,不是你随便能得到的 解决方案二: 当然不排除自己做数据库,自己把所有线路采集到你们自己的数据库,自己查 解决方案三: 自己采集数据去啊 .差距不大的. 解决方案四: 可以去聚合数据和易源API看看 解决方案五: 上百度api store查查,应该会有

android开发查询数据库的实现类和dao层

问题描述 android开发查询数据库的实现类和dao层 之前开发的项目数据单机的吧,现在在公司要开发联网的项目,就用上了数据库,我就要写这前我写的实现类和接口,还有DBHelper,那是我做网站的时候用于查询数据库的,请问做app操作数据库和我之前写的一样么,写个DBHelper,实现类集成接口,增删查改写到实现类里.感觉这流程是不怎么熟悉啊 解决方案 ActiveAndroid 一个andriod DB操作的开源库,很方便 解决方案二: 你用ado比较好点----

android sqlite查询最近一个月的所有数据怎么查

问题描述 android sqlite查询最近一个月的所有数据怎么查 sqlite我想查最近一个月的数据怎么写?也就是查询今天2016.04.19到上个月2016.03.19的所有数据 表名:work 列名:int id varchar workName timestamp starttime timestamp endtime 怎么查?求大神. 解决方案 select * from work where 日期字段 between date('now', "-1 month") and

android分页查询的query的limit 和 offset的前后顺序

问题描述 android分页查询的query的limit 和 offset的前后顺序 sql语句 select * from t_info limit ? offset ?那为什么SQLiteDatabase的db.query(TABLE new String[]{NUMMODE} null null null null null offset+""+limit);偏移量在前.我在找源码 ""s*d+s*(s*d+s*)?"" 是这个正则表达式

c#多条件查询,怎么写语句请教各位c#多条件查询请教各位c#多条件查询

问题描述 c#多条件查询,怎么写语句请教各位c#多条件查询请教各位c#多条件查询 请教各位c#多条件查询,请教各位c#多条件查询请教各位c#多条件查询 解决方案 C#用到的多条件查询 解决方案二: 多条件无非就是拼接下sql,用and连接各个条件.

不同条件查询-mysql 根据不同的条件查询出想要的结果,以List或Bean等形式返回。在线等,谢谢啦!!

问题描述 mysql 根据不同的条件查询出想要的结果,以List或Bean等形式返回.在线等,谢谢啦!! 有一张mySql表:tb_products,表结构如下图: 如何根据条件查询出结果集!条件如下图: 上图中查询条件可能有的为空!! Jvava 后台代码:用这种工具类:QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource()); 如何继续写呢??以List或Bean等形式返回.

列表查询组件代码, 简化拼接条件SQL语句的麻烦

控件代码及测试例子:http://files.cnblogs.com/wuhuacong/CommonSearch.rar  使用场景: 在列表页面中,一般有好几个条件, 用户进行查询时候,需要根据这几个条件进行过滤查询.但在组装这些过滤条件的时候,代码比较烦琐臃肿,本组件代码为解决该问题而设计. 使用目的:  1.减少对参数非空的条件判断 2. 可以构造出参数化的DbCommand对象,简化操作. 3.适当修改后可以用于其他数据访问的参数化参数生成.4.构造Sql语句或者参数化条件更加易读 1