android group by

家住魔仙堡 提交于 2019-12-17 16:18:46

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

比如要用实现这么一个sql语句:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls  GROUP BY number,type,date/8640000
ORDER BY date DESC
这个在一般的SQL编译工具里都能正常运行,在ContentRosolver中有些不一样。

用ContentRosolver中的query这么写:

private static String CALLS_COUNT = "calls_count";
static final String[] CALL_LOG_PROJECTION = new String[] {
           Calls._ID,
           Calls.NUMBER,
           Calls.DATE,
           Calls.DURATION,
           Calls.TYPE,
           Calls.CACHED_NAME,
           Calls.CACHED_NUMBER_TYPE,
           Calls.CACHED_NUMBER_LABEL,
           "COUNT(*) AS " + CALLS_COUNT
   };

String selection = "0==0) GROUP BY ("+
           Calls.NUMBER+"),("+
           Calls.TYPE+"),("+
           Calls.DATE+"/86400000
";  //这里没有左边括号"("和右边括号")"  程序会自己添加.

//0==0 一个=号和2个等于都可以.

rosolver.query(QUERY_TOKEN, null, Calls.CONTENT_URI,
               CALL_LOG_PROJECTION, selection, null, Calls.DEFAULT_SORT_ORDER);

注意事项:
1 关键字“COUNT, AS, GROUP BY”的大小写
2 COUNT(*) 后需要跟AS ***
3 Android会将query中的参数整合成一条sql语句,其中会将selection的字符串自动加一个括号,形成 “WHERE
(*******)”的形式,所以要特别注意selection中有括号的情况
4 GROUP BY后面的字段应该加括号,用逗号隔开。

转化为sql语句正确的形式应该如下:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls WHERE (0==0) GROUP BY
(number),(type),(date/8640000) ORDER BY date DESC

5 此方法在4.0以上系统无法使用,会出现(!type=4)建议大家使用hashset现将电话号码查出来,遍历后添加其他数据

    

public List<NetiveUser> getAllCallRecord(){
		ContentResolver resolver = context.getContentResolver();
		Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls.NUMBER}, null, null, null);
		return getCallRecord(cursor);
	}
	public List<NetiveUser> getCallRecord(Cursor cursor){
		List<NetiveUser> list = new ArrayList<NetiveUser>();
		if(cursor == null){
			return list;
		}
		
		HashSet<String> set = new HashSet<String>();
		while(cursor.moveToNext()){
			String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
			set.add(number);
			
		}
		Iterator iter = set.iterator();
		while(iter.hasNext()){
			String number  = iter.next().toString();
			String type="2";
			netiveUser = new NetiveUser();
			netiveUser.setPhoneNumber(number);
			String times =getCallTiems(number,String.valueOf(type));
			netiveUser.setTimes(times);
			List<NetiveUser> listtime = new ArrayList<NetiveUser>();
			listtime = getDateName(number);
			for(int i=0;i<listtime.size();i++){
				Date time = listtime.get(i).getCtreatetime();
				netiveUser.setCtreatetime(time);
				netiveUser.setUserName(listtime.get(i).getUserName());
				System.out.println("teimesssss--"+time.toString());
			}
			System.out.println("listtime=-----"+listtime);
			list.add(netiveUser);
		}
		
		return list;
	}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!