如何在managedQuery()和getContentResolver().query()方法中实现结果去重

有时候,我们需要对查询的数据库结果进行去重。在SQL中我们可以通过distinct关键字实现,但是当我们使用android提供的managedQuery()或getContentResolver().query()方法对数据库进行查询时,并不能使用distinct关键字。那么,如何解决呢?

首先,让我们来了解一下android中query方法吧。

  当我们调用android系统的query操作的时候,android会把我们写在query方法中的参数构造成一句SQL,

  这句SQL的结构是:select projection from table where ( selection ) order by order;

  projection是我们要查询的列;

  table是根据Uri确定的数据库表;

  selection使我们自己的查询条件;

  order是我们想要的排序方式。

  注意,where语句中的两个括号是系统自己帮我们加的。

其次,在了解了query方法的特点之后,我们通过什么方法来去重呢?

  select projection from table where ( selection )  group by ( group ) order by order;

  通过在query方法中构造类似上面的SQL语句,就可以简单实现去重的效果。核心是对要进行去重的列进行分组!

最后,在query方法中进行使用这个方法。(以getContentResolver().query()为例)

  假设我们有一张表consume,用来记录消费者每年每月的消费信息,

  我们使用ExpandableListView显示消费者在特定年份每个月的消费情况。

  (因为每个月的消费信息不可能只有一条,所以我们要对相同月份的消费信息进行去重)

  那么我们的查询语句应该是:

  getContentResolver().query( Consume.CONTENT_URI , // Uri

    null , // 查询所有列

    Consume.YEAR + " = " + yearValue + " ) " // 与系统中where的左括号'('配对,完成构造where查询条件

    + " group by " + " ( " + Consume.MONTH // 与系统中where的右括号')'配对,完成构造Group By语句

    . Consume.MONTH + " ASC " ); // 升序排列月份

  android系统会把上面的函数编译为如下格式的SQL语句:

  select * from consume where ( year = yearValue ) group by ( month ) order by month ASC;

  // yearValue是我们给定的值,如yearValue = 2012,则查询2012年每个月的消费信息

  这样我们查到的Cursor就没有重复的月份了。

总结

  上面的方法是巧妙的利用了系统在构造where时自动添加的'('和')',进而通过分组(group by)的方式实现去重效果.

转自“http://www.cnblogs.com/Lefter/archive/2012/08/08/2628621.html”

转载于:https://www.cnblogs.com/ftrako/p/5244483.html

getContentResolver().query()方法selection参数使用详解(转)相关推荐

  1. python request.post 字典参数以json_Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  2. python post json参数,Python requests.post方法中data与json参数区别详解

    在通过requests.post()进行POST请求时,传入报文的参数有两个,一个是data,一个是json. data与json既可以是str类型,也可以是dict类型. 区别: 1.不管json是 ...

  3. ANSYS Workbench接触设置面板各参数含义详解

    ANSYS Workbench接触设置面板各参数含义详解    Ansys Workbench的接触设置面板由接触范围设置(Scope),基本参数定义(Definition),高级选项(Advance ...

  4. 在managedQuery()和getContentResolver().query()方法中实现结果去重

    有时候,我们需要对查询的数据库结果进行去重.在SQL中我们可以通过distinct关键字实现,但是当我们使用android提供的managedQuery()或getContentResolver(). ...

  5. python中fn的用法_Pytorch技巧:DataLoader的collate_fn参数使用详解

    DataLoader完整的参数表如下: class torch.utils.data.DataLoader( dataset, batch_size=1, shuffle=False, sampler ...

  6. python 函数参数self_Python类中self参数用法详解

    Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上.后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了. 首先明确的是s ...

  7. java显示参数,Java中的隐式参数和显示参数实例详解

    在学习java的过程中,我们会遇到许多的问题.下面我们就来看看什么是隐式参数和显示参数. 显式参数,就是平时见到的在方法名括号中间的参数,就是所谓能看得见的参数www.cppcns.com. 隐式参数 ...

  8. Android JNI使用方法,JNI机制详解

    Android JNI使用方法,JNI机制详解 JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此N ...

  9. 主成分分析(PCA)方法步骤以及代码详解

    主成分分析(PCA)方法步骤以及代码详解 前言 上一节我们了解到在构建神经网络模型,除了掌握如何搭建神经网络架构,了解参数具体含义,规避风险等方法.第一步是要对采用数据集的详细了解,无需接触任何神经网 ...

最新文章

  1. java模拟使用接口,关于java:模拟一个类与模拟它的接口
  2. ORACLE_LOADER加载外部数据
  3. 介绍求解AX=b:可解性与解的结构
  4. 深入Java -JVM 垃圾回收
  5. colab中的在Github中保存一份副本无法保存到自己github
  6. JAVA入门级教学之(浮点型数据类型)
  7. JavaScript数据结构与算法(六) 链表的实现
  8. 时间记录html,jquery水平、垂直时间线记录jQuery Timelinr
  9. python安装whl_1 Matplotlib在win10下安装
  10. Android模拟地图gps定位
  11. ppt的计算机试题,2016年职称计算机考试PowerPoint练习试题及答案
  12. uicontrol_与UIControl结合
  13. 【软考】专栏导读(软考全面介绍、资格报考建议)
  14. Html跳转页面时,URL传值-获取
  15. 东芝服务器硬盘参数,性能媲美万转 东芝8TB MG05硬盘体验
  16. mybatipse 下载_哇塞!可以免费下载某度文档的doc格式啦
  17. 小说:凡人修仙路基础
  18. 基于SSM实现高校应届生就业管理系统
  19. BGP路由技术详解(一)
  20. mysql并发ppt_高并发下MySQL数据库的优化.ppt

热门文章

  1. JavaScript 之 动态加载JS代码或JS文件
  2. 美国美国,USA USA
  3. java replaceall函数_JAVA中string.replace和string.replaceAll的区别及用法
  4. 学材分析计算机一体化,计算机一体化教学的体会
  5. Mybatis之SqlSession简析
  6. 硬件知识:固态硬盘相关知识介绍
  7. 后端技术:SpringBoot 中实现跨域的5种方式
  8. python入门之运算符的使用的答案_python入门教程之基本算术运算符
  9. c++头文件_51单片机C语言编程知多少:几人不知头文件,你要的干货在这里了
  10. e4a html文本,E4A 怎么将剪贴版中的文本 粘贴到窗口的光标处啊?求个代码