getContentResolver().query()方法selection參數使用詳解

來源:互聯網
上載者:User

標籤:

有時候,我們需要對查詢的資料庫結果進行去重。在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”

getContentResolver().query()方法selection參數使用詳解(轉)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.