getContentResolver().query()方法selection参数使用详解(转)

如何在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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言试题106之有一对兔子问题

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又…

【C#程序设计】教学讲义——第二章:简单C#程序设计

教学目录 2.1 面向对象的概念2.2 建立简单的应用程序2.3 窗体和Label控件2.4 文本框-属性2.5 按钮控件本章小结2.1 面向对象的概念 2.1.1 对象和类 1.对象 对象是客观世界中对象的模型化。对象是有着特殊数据(属性)与操作(行为)的实体,对象的操作(行为)称为方法。 程…

Blazor University (34)表单 —— 获得表单状态

原文链接&#xff1a;https://blazor-university.com/forms/accessing-form-state/获得表单状态源代码[1]有时&#xff0c;我们需要获得 <EditForm> 子内容中的表单状态。最常见的用途是当我们需要访问输入的 CSS 类时&#xff0c;指示输入是否被修改或有效/无效。例如&a…

[转]c# 中间件 的扩展模型(.net webapi/.net Core 的 MiddleWare 处理模型)

在学习 asp.net WebApi 或者asp.net Core 的时候&#xff0c;它们管道的处理模型跟 asp.net MVC/WebForm 的管道模型是不一样的。 asp.net WebApi 或者asp.net Core 他们使用了一种叫做“中间件”的处理模型&#xff0c;相对于传统管道模型&#xff0c;剔除了很多非必要的处理…

AIX 环境下遇到Device Busy问题

IBM AIX v5.3操作系统环境下在对网络或网卡进行操作过程中经常遇到"Device Busy"而终止操作例如:#rmdev -l ent1遇到如下返回信息Method error (/etc/methods/ucfgdevice):0514-062 Cant perform the requested function because the speciafield.device is busy. 解…

mykernel编译过程中问题解决

fatal error: linux/compiler-gcc5.h: No such file or directorycompilation terminated.解决方法:https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/plain/include/linux/compiler-gcc5.h?id2c07053b8e1e0c22bb54dfbdf8e86a70f8bf00fc复制内容保存为c…

C#中的 Attribute 与 Python/TypeScript 中的装饰器是同个东西吗

前言最近成功把「前端带师」带入C#的坑&#xff08;实际是前端带师开始从cocos转unity游戏开发了&#xff09;某天&#xff0c;「前端带师」看到这段代码后问了个问题&#xff1a;[这个是装饰器]&#xff1f;[HttpGet] public Response Get() {return ... }我第一反应觉得不是&…

【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建

文章目录ArcGIS Engine概述ArcGIS Engine与ArcObjects的关系ArcGIS Engine下载及安装ArcGIS Engine概述 ArcGIS Engine简介 ArcGIS Engine是ESRI公司在2004年推出的用于开发C/S架构GIS应用软件的工具包&#xff0c;是将用于构建ArcGIS整套产品的组件库——ArcObjects的比分功…

微软Visual Studio 2019版本16.3 正式发布,支持 .NET Core 3.0

微软正式发布了Visual Studio 2019 16.3版本&#xff0c;主要更新内容如下&#xff1a; .NET Core 3.0 Visual Studio版本16.3包括对 .NET Core 3.0 的支持。 注意&#xff1a;如果使用的是.NET Core 3.0&#xff0c;则需要使用Visual Studio 16.3或更高版本。 .NET Core桌…

C语言试题120之输入两个正整数 m 和 n,求其最大公约数和最小公倍数

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数 分析:利用辗除法 2 、温馨提示…

spring+springMvc+mybatis 调用oracle 存储过程

最近在项目中遇到在mybatis中调用oracle存储过程的问题&#xff0c;网上各种查询&#xff0c;最终解决了问题&#xff0c;在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键&#xff0c; 接下来整理代码&#xff1a; 首先构建存储过程getSeq…

OSChina 周一乱弹 ——致我们终将逝去的青春

2019独角兽企业重金招聘Python工程师标准>>> 我们的青春是这样的。 从幼儿园午睡开始&#xff0c; 做了一万遍的广播体操&#xff0c; 一条充满了“血”和“泪”的三八线 遍地开花的煎饼果子摊 五毛钱只能养活三天的小鸡 象征着财富和地位的弹珠 放学后 奔向世界 放…

【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比

文章目录2.1 使用VBA进行桌面软件开发2.1.1 VBA开发方式2.1.1 VBA代码的安全性2.2 使用DLL进行桌面软件开发2.2.1 DLL开发方式2.2.2 DLL功能的应用部署2.3 使用Add-in进行桌面软件开发2.4 使用ArcGIS Engine构建独立应用程序对于桌面GIS应用来说&#xff0c;ArcGIS平台不仅提供…

使用.Net驱动Jetson Nano的OLED显示屏

背景最近几年&#xff0c;边缘计算的需求急剧爆发。人工智能、物联网和 5G 的演进给边缘计算带来了无限的可能性。因为工作原因&#xff0c;有幸在2019开始接触了英伟达 Jetson 家族的各种边缘计算设备&#xff1a;Nano&#xff0c;TX2&#xff0c;AGX&#xff0c;NX等&#xf…

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!

工程测量不用愁,120个视频动画帮你忙,简单易学直观明了!文末提供下载地址。

2016-2017-2学期《程序设计与数据结构》教学进程

2016-2017-2学期《程序设计与数据结构》教学进程 目录 考核方式课前准备教学进程 第00周学习任务和要求第01周学习任务和要求第02周学习任务和要求第03周学习任务和要求第04周学习任务和要求第05周学习任务和要求第06周学习任务和要求第07周学习任务和要求第08周学习任务和要求…

[转]Spring SpringMVC SpringBoot SpringCloud概念、关系及区别

&#xfeff;&#xfeff;一、正面解读&#xff1a; Spring主要是基于IOC反转Beans管理Bean类&#xff0c;主要依存于SSH框架&#xff08;StrutsSpringHibernate&#xff09;这个MVC框架&#xff0c;所以定位很明确&#xff0c;Struts主要负责表示层的显示&#xff0c;Spring利…

C语言试题121之输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 分析:利用 w…

5.4 Spring AOP

2019独角兽企业重金招聘Python工程师标准>>> 5.4.1 从代理机制初探AOP 来看一个简单的例子&#xff0c;当需要在执行某些方法时留下日志信息&#xff0c;可能会这样写&#xff1a; import java.util.logging.*; public class HelloSpeaker{ pirvate Logger loggerL…

WPF 实现心电图曲线绘制

本文经原作者授权以原创方式二次分享&#xff0c;欢迎转载、分享。原文作者&#xff1a;流浪g原文地址&#xff1a;https://www.cnblogs.com/cong2312/p/16411637.html一、前言项目中之前涉及到胎儿心率图曲线的绘制&#xff0c;最近项目中还需要添加心电曲线和血样曲线的绘制功…