比如要用实现这么一个sql语句:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM callsGROUP 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

更多相关文章

  1. sqlite与android交互 (封装)
  2. 【Android】Parse 开发笔记(3)—— 实现查找附近的功能(LBS)
  3. android 关系型数据库 SQLiteDatabase的 增 删 改 查
  4. Android可能出现的SQL注入以及防范
  5. Android中使用GreenDao的坑整理
  6. 在Windows上运行Android(安卓)4.0 的 CTS 测试
  7. Android(安卓)SqliteManager 源码
  8. Android(安卓)基于Zxing的扫码功能实现(二)
  9. Android的dex热修复的实现基本原理

随机推荐

  1. Android(安卓)App 国际化详解
  2. Android中如何启动第三方应用
  3. 如果没有 Android,世界会怎样?-IT蓝豹
  4. HandlerThread
  5. Android(安卓)Edittext显示输入法 搜索
  6. Android 远程服务(remote service)
  7. Android开发 FAQ
  8. React Native 适配Android物理返回键,实现
  9. Android作业:一个3D相册源码
  10. unity3d开发一:入门知识+导入模型+旋转脚