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.pswp.cn/news/285527.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285527.shtml
英文地址,請注明出處:http://en.pswp.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;最近項目中還需要添加心電曲線和血樣曲線的繪制功…