Litepal使用總結(jié)

1.第一步先在項(xiàng)目build.gradle集成? ? compile'org.litepal.android:core:1.6.1'

2.創(chuàng)建assets目錄,創(chuàng)建litepal.xml文件


圖中.dbname表示數(shù)據(jù)庫名稱? version? 表示版本

list 標(biāo)簽用來關(guān)聯(lián)數(shù)據(jù)庫表的實(shí)體類(注意必須使用全路徑)

如果有自己的ba'se'Application要在oncrate方法里面進(jìn)行初始化操作

LitePal.initialize(this);

Connector.getDatabase();//用于創(chuàng)建數(shù)據(jù)庫


操作實(shí)體類進(jìn)行增刪改查需要繼承DataSupport

保存 只需要調(diào)用save()方法就可以

更新有以下方式

1ContentValues?values?=?new?ContentValues();??

values.put("title",?"今日iPhone6發(fā)布");??

DataSupport.update(News.class,?values,?2);?這個靜態(tài)的update()方法接收三個參數(shù),第一個參數(shù)是Class,傳入我們要修改的那個類的Class就好,第二個參數(shù)是ContentValues對象,這三個參數(shù)是一個指定的id,表示我們要修改哪一行數(shù)據(jù)。

修改id為2的數(shù)據(jù)

2??updateAll()方法表示修改多行記錄,其中第一個參數(shù)仍然是Class,第二個參數(shù)還是ContentValues對象,第三個參數(shù)是一個conditions數(shù)組,用于指定修改哪些行的約束條件,返回值表示此次修改影響了多少行數(shù)據(jù)。

ContentValues?values?=?new?ContentValues();??

values.put("title",?"今日iPhone6?Plus發(fā)布");??

DataSupport.updateAll(News.class,?values,?"title?=??",?"今日iPhone6發(fā)布");

重點(diǎn)我們看一下最后的這個conditions數(shù)組,由于它的類型是一個String數(shù)組,我們可以在這里填入任意多個String參數(shù),其中最前面一個String參數(shù)用于指定約束條件,后面所有的String參數(shù)用于填充約束條件中的占位符(即?號),比如約束條件中有一個占位符,那么后面就應(yīng)該填寫一個參數(shù),如果有兩個占位符,后面就應(yīng)該填寫兩個參數(shù),以此類推

3也可以這樣子寫

News?updateNews?=?new?News();??

updateNews.setTitle("今日iPhone6發(fā)布");??

updateNews.update(2);?

4

那么如果我們想把news表中標(biāo)題為“今日iPhone6發(fā)布”且評論數(shù)量大于0的所有新聞的標(biāo)題改成“今日iPhone6 Plus發(fā)布”,就可以這樣寫:

News?updateNews?=?new?News();??

updateNews.setTitle("今日iPhone6發(fā)布");??

updateNews.updateAll("title?=???and?commentcount?>??",?"今日iPhone6發(fā)布",?"0");??

但是這種用法有一點(diǎn)需要注意,就是如果我們想把某一條數(shù)據(jù)修改成默認(rèn)值,比如說將評論數(shù)修改成0,只是調(diào)用updateNews.setCommentCount(0)這樣是不能修改成功的,因?yàn)榧词共徽{(diào)用這行代碼,commentCount的值也默認(rèn)是0。所以如果想要將某一列的數(shù)據(jù)修改成默認(rèn)值的話,還需要借助setToDefault()方法。用法也很簡單,在setToDefault()方法中傳入要修改的字段名就可以了(類中的字段名),比如說我們想要把news表中所有新聞的評論數(shù)清零,就可以這樣寫:

News?updateNews?=?new?News();??

updateNews.setToDefault("commentCount");??

updateNews.updateAll();??

刪除操作

delete()方法接收兩個參數(shù),第一個參數(shù)是Class,傳入我們要刪除的那個類的Class就好,第二個參數(shù)是一個指定的id,表示我們要刪除哪一行數(shù)據(jù)。

那么比如說我們想刪除news表中id為2的記錄,就可以這樣寫:

DataSupport.delete(News.class,?2);

deleteAll()方法接收兩個參數(shù),第一個參數(shù)是Class,傳入我們要刪除的那個類的Class就好,第二個參數(shù)是一個conditions數(shù)組,用于指定刪除哪些行的約束條件,返回值表示此次刪除了多少行數(shù)據(jù),用法和updateAll()方法是基本相同的。

而如果我們想把news表中所有的數(shù)據(jù)全部刪除掉,就可以這樣寫:

DataSupport.deleteAll(News.class);?

查詢操作

首先是調(diào)用了DataSupport的where()方法,在這里指定了查詢條件。where()方法接收任意個字符串參數(shù),其中第一個參數(shù)用于進(jìn)行條件約束,從第二個參數(shù)開始,都是用于替換第一個參數(shù)中的占位符的。那這個where()方法就對應(yīng)了一條SQL語句中的where部分。

List?newsList?=?DataSupport.select("title",?"content")??

.where("commentcount?>??",?"0")??

.order("publishdate?desc").find(News.class);??

order()方法中接收一個字符串參數(shù),用于指定查詢出的結(jié)果按照哪一列進(jìn)行排序,asc表示正序排序,desc表示倒序排序,因此order()方法對應(yīng)了一條SQL語句中的order by部分


篩選查詢 剛才我們查詢到的是所有匹配條件的前10條新聞,那么現(xiàn)在我想對新聞進(jìn)行分頁展示,翻到第二頁時,展示第11到第20條新聞,這又該怎么實(shí)現(xiàn)呢?沒關(guān)系,在LitePal的幫助下,這些功能都是十分簡單的,只需要再連綴一個偏移量就可以了,如下所示:

List?newsList?=?DataSupport.select("title",?"content")??

.where("commentcount?>??",?"0")??

.order("publishdate?desc").limit(10).offset(10)??

.find(News.class);??

可以看到,這里我們又添加了一個offset()方法,用于指定查詢結(jié)果的偏移量,這里指定成10,就表示偏移十個位置,那么原來是查詢前10條新聞的,偏移了十個位置之后,就變成了查詢第11到第20條新聞了,如果偏移量是20,那就表示查詢第21到第30條新聞,以此類推。因此,limit()方法和offset()方法共同對應(yīng)了一條SQL語句中的limit部分。



進(jìn)查詢的用法非常簡單,就只有這么多,其它find()方法也都是同樣的用法,就不再重復(fù)介紹了。但是這種查詢方式LitePal并不推薦,因?yàn)槿绻坏╆P(guān)聯(lián)表中的數(shù)據(jù)很多,查詢速度可能就會非常慢。而且激進(jìn)查詢只能查詢出指定表的關(guān)聯(lián)表數(shù)據(jù),但是沒法繼續(xù)迭代查詢關(guān)聯(lián)表的關(guān)聯(lián)表數(shù)據(jù)。因此,這里我建議大家還是使用默認(rèn)的懶加載更加合適,至于如何查詢出關(guān)聯(lián)表中的數(shù)據(jù),其實(shí)只需要在模型類中做一點(diǎn)小修改就可以了。

public?class?News?extends?DataSupport{??

public?List?getComments()?{??

return?DataSupport.where("news_id?=??",?String.valueOf(id)).find(Comment.class);??

????}??

}??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容