多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > 綜合技術(shù) > Android數(shù)據(jù)庫高手秘籍(八)――使用LitePal的聚合函數(shù)

Android數(shù)據(jù)庫高手秘籍(八)――使用LitePal的聚合函數(shù)

來源:程序員人生   發(fā)布時間:2014-12-07 09:41:32 閱讀次數(shù):3900次

轉(zhuǎn)載請注明出處:http://blog.csdn.net/guolin_blog/article/details/40614197

在上1篇文章當(dāng)中,我們已把LitePal查詢操作的所有用法都學(xué)習(xí)完了,很明顯,LitePal幫我們提供了非常強(qiáng)大的查詢API,使得我們可以極度輕松地完成各種類型的查詢。但是呢,在SQL語句當(dāng)中,有1種查詢是比較特殊的,就是聚合函數(shù)查詢,它不像傳統(tǒng)查詢1樣是將表中的某些列的數(shù)據(jù)查詢出來,而是將查詢結(jié)果進(jìn)行聚合和統(tǒng)計,終究將統(tǒng)計后的結(jié)果進(jìn)行返回。因此,任何1個關(guān)系型數(shù)據(jù)庫中都會提供像count()、sum()等聚合函數(shù)。那末不出你所料,LitePal當(dāng)中也是對這些聚合函數(shù)都進(jìn)行了封裝,讓我們的操作可以變得更加簡單。因此,今天我們就來學(xué)習(xí)1下LitePal中聚合函數(shù)的用法,還沒有看過前面1篇文章的朋友建議先去參考 Android數(shù)據(jù)庫高手秘籍(7)――體驗(yàn)LitePal的查詢藝術(shù)

LitePal的項(xiàng)目地址是:https://github.com/LitePalFramework/LitePal

傳統(tǒng)的聚合函數(shù)用法

雖然說是聚合函數(shù),但它的用法其實(shí)和傳統(tǒng)的查詢還是差不多的,即依然使用的是select語句。但是在select語句當(dāng)中我們通常不會再去指定列名,而是將需要統(tǒng)計的列名傳入到聚合函數(shù)當(dāng)中,那末履行select語句使用的還是SQLiteDatabase中的rawQuery()方法。下面我們來嘗試1下,比如說想要統(tǒng)計news表中1共有多少行,就能夠這樣寫:

SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor c = db.rawQuery("select count(1) from news", null); if (c != null && c.moveToFirst()) { int count = c.getInt(0); Log.d("TAG", "result is " + count); } c.close();
可以看到,在rawQuery()方法中我們指定了1個聚合查詢語句,其中count(1)就是用于去統(tǒng)計1共有多少行的。固然這里其實(shí)不1定要用count(1),使用count(*)或count(主鍵)都可以。然后rawQuery()方法返回的是1個Cursor對象,我們從這個Cursor當(dāng)中取出第1行第1列的數(shù)據(jù),這也就是統(tǒng)計出的結(jié)果了。

那如果我們想要統(tǒng)計出news表中評論的總數(shù)量該怎樣寫呢?代碼以下所示:

SQLiteDatabase db = dbHelper.getWritableDatabase(); Cursor c = db.rawQuery("select sum(commentcount) from news", null); if (c != null && c.moveToFirst()) { int count = c.getInt(0); Log.d("TAG", "result is " + count); } c.close();
我們發(fā)現(xiàn),代碼基本是非常類似的,只不過查詢語句當(dāng)中count()函數(shù)替換成了sum()函數(shù)。固然了,sum()函數(shù)要求傳入1個指定的列名,表示我們要匯總這1列的總合,因此這里我們傳入了commentcount這1列。

其它聚合函數(shù)的用法也是類似的,就不逐一羅列了。由此我們可以總結(jié)出1些結(jié)論,聚合函數(shù)都是要使用rawQuery()方法進(jìn)行SQL查詢,然后結(jié)果會封裝到Cursor對象當(dāng)中,接著我們再從Cursor中將結(jié)果取出。雖然說你可能覺得上面的用法已足夠簡單了,由于總共也就只寫了67行代碼,但是你有無想過更簡單的寫法,比如說只用1行代碼就完成聚合查詢操作。你沒有看錯,就是1行代碼,LitePal讓這些都成了可能,那末下面我們就來學(xué)習(xí)1下LitePal中聚合函數(shù)的用法。

使用LitePal的聚合函數(shù)

LitePal中1共提供了count()、sum()、average()、max()和min()這5種聚合函數(shù),基本上已將SQL語句當(dāng)中最經(jīng)常使用的幾種聚合函數(shù)都覆蓋了,那末下面我們就來對這5種聚合函數(shù)的用法逐一進(jìn)行學(xué)習(xí)。

count()

count()方法主要是用于統(tǒng)計行數(shù)的,剛才演示了如何通過SQL語句來統(tǒng)計news表中1共有多少行,那末下面我們來看1下如何通過LitePal來實(shí)現(xiàn)一樣的功能,代碼以下所示:

int result = DataSupport.count(News.class);
你沒有看錯!就是這樣1行代碼就能夠了。調(diào)用DataSupport類當(dāng)中的count()方法,count()方法接收1個Class參數(shù),用于指定去統(tǒng)計哪張表當(dāng)中的數(shù)據(jù),然后返回值是1個整型數(shù)據(jù),也就是統(tǒng)計出的結(jié)果了。

除此以外,LitePal中所有的聚合函數(shù)都是支持聯(lián)綴的,也就是說我們可以在統(tǒng)計的時候加入條件語句。比如說想要統(tǒng)計1共有多少條新聞是零評論的,就能夠這樣寫:

int result = DataSupport.where("commentcount = ?", "0").count(News.class);
這個用法和我們在上1篇文章當(dāng)中學(xué)到的聯(lián)綴查詢是比較像的,在DataSupport類中首先指定1個where語句用于條件束縛,然后聯(lián)綴1個count()方法,這樣統(tǒng)計出的就是滿足條件語句的結(jié)果了。聯(lián)綴不但適用于count()方法,也一樣適用于下面我們將要介紹的所有方法,但由于用法都是相同的,后面就不再重復(fù)介紹了。

sum()

看完了count()方法應(yīng)當(dāng)是覺得非常簡單吧,剩下的幾個聚合函數(shù)也是一樣簡單的,我們繼續(xù)來學(xué)習(xí)1下。

sum()方法主要是用于對結(jié)果進(jìn)行求合的,比如說我們想要統(tǒng)計news表中評論的總數(shù)量,就能夠這樣寫:

int result = DataSupport.sum(News.class, "commentcount", int.class);
sum()方法的參數(shù)要略微多1點(diǎn),我們來逐一看下。第1個參數(shù)很簡單,還是傳入的Class,用于指定去統(tǒng)計哪張表當(dāng)中的數(shù)據(jù)。第2個參數(shù)是列名,表示我們希望對哪個列中的數(shù)據(jù)進(jìn)行求合。第3個參數(shù)用于指定結(jié)果的類型,這里我們指定成int型,因此返回結(jié)果也是int型。

需要注意的是,sum()方法只能對具有運(yùn)算能力的列進(jìn)行求合,比如說整型列或浮點(diǎn)型列,如果你傳入1個字符串類型的列去求合,肯定是得不到任何結(jié)果的,這時候只會返回1個0作為結(jié)果。

average()

average()方法主要是用于統(tǒng)計平均數(shù)的,比如說我們想要統(tǒng)計news表中平均每條新聞有多少評論,就能夠這樣寫:

double result = DataSupport.average(News.class, "commentcount");
其中average()方法接收兩個參數(shù),第1個參數(shù)不用說,依然是Class。第2個參數(shù)用于指定列名的,表示我們想要統(tǒng)計哪1列的平均數(shù)。需要注意的是,這里返回值的類型是double型,由于平均數(shù)基本上都是會帶有小數(shù)的,用double類型可以最大程序保存小數(shù)位的精度。

一樣地,average()方法也只能對具有運(yùn)算能力的列進(jìn)行求平均值,如果你傳入了1個字符串類型的列,也是沒法得到任何結(jié)果的,這時候一樣只會返回1個0作為結(jié)果。

max()

max()方法主要用于求出某個列中最大的數(shù)值,比如我們想要知道news表中所有新聞里面最高的評論數(shù)是多少,就能夠這樣寫:

int result = DataSupport.max(News.class, "commentcount", int.class);
可以看到,max()方法接收3個參數(shù),第1個參數(shù)一樣還是Class,用于指定去統(tǒng)計哪張表當(dāng)中的數(shù)據(jù)。第2個參數(shù)是列名,表示我們希望統(tǒng)計哪一個列中的最大值。第3個參數(shù)用于指定結(jié)果的類型,根據(jù)實(shí)際情況來選擇傳入哪一種類型就好了。

那末不用多說,max()方法也只能對具有運(yùn)算能力的列進(jìn)行求最大值的,希望你在使用的時候能夠謹(jǐn)記這1點(diǎn)。

min()

min()方法主要用于求出某個列中最小的數(shù)值,比如我們想要知道news表中所有新聞里面最少的評論數(shù)是多少,就能夠這樣寫:

int result = DataSupport.min(News.class, "commentcount", int.class);
min()方法和max()方法的用法基本上是1模1樣的,參數(shù)也是完全相同,只是方法名變了1下。它們1個是求出某1列中的最大值,1個是求出某1列中的最小值,僅此而已。

現(xiàn)在我們已將LitePal中所有聚合函數(shù)的用法全部都學(xué)習(xí)完了,怎樣樣,是否是感覺非常的簡單?學(xué)完以后相信大家也意想到我在開篇的時候其實(shí)不是在吹牛皮了,確確切實(shí)只需要1行代碼就能夠完成各種聚合查詢操作了,上面任何1個統(tǒng)計操作我們都沒有寫到第2行代碼。

好了,經(jīng)過8篇文章的學(xué)習(xí),我們已將LitePal中最主要的功能基本都學(xué)習(xí)完了,相信你從頭看到這里,也是經(jīng)歷了1個對LitePal零認(rèn)識,到目前可以熟練使用LitePal的1個進(jìn)程。那末我們的這個Android數(shù)據(jù)庫高手秘籍教程到這里也就要暫停了,這個系列短時間不會再更新,而是等到LitePal發(fā)布了新版本,有了新功能以后才會對它繼續(xù)進(jìn)行講授。后面我依然會繼續(xù)分享更多Android技術(shù)相干的其它文章,感謝大家對本專欄的延續(xù)關(guān)注。

LitePal開源項(xiàng)目地址:https://github.com/LitePalFramework/LitePal

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 第一国内永久免费福利视频 | 亚洲欧美日韩精品久久亚洲区色播 | 不卡的毛片 | 国产精品免费aⅴ片在线观看 | 在线观看欧洲成人免费视频 | 九九精品久久久久久久久 | 最近中文字幕mv免费看 | 一级毛片www | 综合久久一区二区三区 | 久久精品视频一区 | 久久视频精品36线视频在线观看 | 亚洲视频 欧美视频 | 国产片自拍 | 免费麻豆国产一区二区三区四区 | 欧美精品18videose×性欧美 | 大看蕉a在线观看 | 久久久国产精品免费看 | 在线免费欧美 | 午夜精品久久久久 | 真实国产精品视频国产网 | 一级毛片视频免费观看 | 国产最新精品2020好看的 | 亚洲国产日韩综合久久精品 | 亚洲精品伊人久久久久 | 国产精品精品国产一区二区 | 亚洲国产高清人在线 | 吃奶跟添下面特舒服 | 色永久| 久久精品二三区 | 国产在线成人一区二区 | 国产欧美日韩综合精品二区 | 欧美18 19sex性处video | 国产一区二区色淫影院 | 日本8888xxxx免费视频 | 欧美日韩不卡视频 | 欧美一级片黄色片 | 琪琪理论影院2018中文版 | 欧美一级毛片美99毛片 | 国产成人精品免费大全 | 欧美日韩中文国产一区 | 国产第3页 |