日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

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

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

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

轉(zhuǎn)載請(qǐng)注明出處: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)計(jì),終究將統(tǒng)計(jì)后的結(jié)果進(jìn)行返回。因此,任何1個(gè)關(guān)系型數(shù)據(jù)庫中都會(huì)提供像count()、sum()等聚合函數(shù)。那末不出你所料,LitePal當(dāng)中也是對(duì)這些聚合函數(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)中我們通常不會(huì)再去指定列名,而是將需要統(tǒng)計(jì)的列名傳入到聚合函數(shù)當(dāng)中,那末履行select語句使用的還是SQLiteDatabase中的rawQuery()方法。下面我們來嘗試1下,比如說想要統(tǒng)計(jì)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個(gè)聚合查詢語句,其中count(1)就是用于去統(tǒng)計(jì)1共有多少行的。固然這里其實(shí)不1定要用count(1),使用count(*)或count(主鍵)都可以。然后rawQuery()方法返回的是1個(gè)Cursor對(duì)象,我們從這個(gè)Cursor當(dāng)中取出第1行第1列的數(shù)據(jù),這也就是統(tǒng)計(jì)出的結(jié)果了。

那如果我們想要統(tǒng)計(jì)出news表中評(píng)論的總數(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個(gè)指定的列名,表示我們要匯總這1列的總合,因此這里我們傳入了commentcount這1列。

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

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

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

count()

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

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

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

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

sum()

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

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

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

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

average()

average()方法主要是用于統(tǒng)計(jì)平均數(shù)的,比如說我們想要統(tǒng)計(jì)news表中平均每條新聞?dòng)卸嗌僭u(píng)論,就能夠這樣寫:

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

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

max()

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

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

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

min()

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

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

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

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

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

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 99视频在线免费观看 | 天堂网在线视频 | 国产精品嫩草在线 | 亚洲综合一区二区 | 国产欧美日本在线 | 一极黄色大片 | 国产91精品久久久久久久 | 国产精品国产馆在线真实露脸 | 天堂精品一区二区三区 | 一级午夜 | 欧美黑人 | 日韩在线视频观看 | 国产精品一区二区女厕厕 | 亚洲天堂中文字幕 | 日韩免费小视频 | 国产精品久久国产精品 | 国产一区二区中文字幕 | 久久久国产精品视频 | 亚洲成人三区 | 日韩欧美视频一区二区 | 九九热免费在线视频 | 欧美黑人巨大videos精品 | 日韩高清不卡 | 黄色片在线| 欧洲精品一区二区三区 | 男女羞羞免费视频 | 欧美一区二区免费 | 日韩一区二区三区视频 | 国产午夜亚洲精品理论片色戒 | 国产高清在线视频 | 一区二区三区精品 | 欧美成人激情 | 国产区精品视频 | www.在线播放 | 91久久精品一区二区 | av成人国产 | 免费观看一级特黄欧美大片 | 国产在线国偷精品免费看 | 欧美亚洲日本一区 | 日韩国产精品久久久久久亚洲 | 超碰中文字幕 |