1.第一步先在項(xiàng)目build.gradle集成? ? compile'org.litepal.android:core:1.6.1'
2.創(chuàng)建assets目錄履植,創(chuàng)建litepal.xml文件
圖中.dbname表示數(shù)據(jù)庫(kù)名稱? version? 表示版本
list 標(biāo)簽用來(lái)關(guān)聯(lián)數(shù)據(jù)庫(kù)表的實(shí)體類(注意必須使用全路徑)
如果有自己的ba'se'Application要在oncrate方法里面進(jìn)行初始化操作
LitePal.initialize(this);
Connector.getDatabase();//用于創(chuàng)建數(shù)據(jù)庫(kù)
操作實(shí)體類進(jìn)行增刪改查需要繼承DataSupport
保存 只需要調(diào)用save()方法就可以
更新有以下方式
1ContentValues?values?=?new?ContentValues();??
values.put("title",?"今日iPhone6發(fā)布");??
DataSupport.update(News.class,?values,?2);?這個(gè)靜態(tài)的update()方法接收三個(gè)參數(shù)盼铁,第一個(gè)參數(shù)是Class仗阅,傳入我們要修改的那個(gè)類的Class就好,第二個(gè)參數(shù)是ContentValues對(duì)象重归,這三個(gè)參數(shù)是一個(gè)指定的id昔穴,表示我們要修改哪一行數(shù)據(jù)。
修改id為2的數(shù)據(jù)
2??updateAll()方法表示修改多行記錄提前,其中第一個(gè)參數(shù)仍然是Class,第二個(gè)參數(shù)還是ContentValues對(duì)象泳唠,第三個(gè)參數(shù)是一個(gè)conditions數(shù)組狈网,用于指定修改哪些行的約束條件,返回值表示此次修改影響了多少行數(shù)據(jù)笨腥。
ContentValues?values?=?new?ContentValues();??
values.put("title",?"今日iPhone6?Plus發(fā)布");??
DataSupport.updateAll(News.class,?values,?"title?=??",?"今日iPhone6發(fā)布");
重點(diǎn)我們看一下最后的這個(gè)conditions數(shù)組拓哺,由于它的類型是一個(gè)String數(shù)組,我們可以在這里填入任意多個(gè)String參數(shù)脖母,其中最前面一個(gè)String參數(shù)用于指定約束條件士鸥,后面所有的String參數(shù)用于填充約束條件中的占位符(即?號(hào)),比如約束條件中有一個(gè)占位符谆级,那么后面就應(yīng)該填寫一個(gè)參數(shù)烤礁,如果有兩個(gè)占位符讼积,后面就應(yīng)該填寫兩個(gè)參數(shù),以此類推
3也可以這樣子寫
News?updateNews?=?new?News();??
updateNews.setTitle("今日iPhone6發(fā)布");??
updateNews.update(2);?
4
那么如果我們想把news表中標(biāo)題為“今日iPhone6發(fā)布”且評(píng)論數(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)值,比如說(shuō)將評(píng)論數(shù)修改成0鲤脏,只是調(diào)用updateNews.setCommentCount(0)這樣是不能修改成功的们颜,因?yàn)榧词共徽{(diào)用這行代碼,commentCount的值也默認(rèn)是0猎醇。所以如果想要將某一列的數(shù)據(jù)修改成默認(rèn)值的話窥突,還需要借助setToDefault()方法。用法也很簡(jiǎn)單硫嘶,在setToDefault()方法中傳入要修改的字段名就可以了(類中的字段名)阻问,比如說(shuō)我們想要把news表中所有新聞的評(píng)論數(shù)清零,就可以這樣寫:
News?updateNews?=?new?News();??
updateNews.setToDefault("commentCount");??
updateNews.updateAll();??
刪除操作
delete()方法接收兩個(gè)參數(shù)音半,第一個(gè)參數(shù)是Class则拷,傳入我們要?jiǎng)h除的那個(gè)類的Class就好,第二個(gè)參數(shù)是一個(gè)指定的id曹鸠,表示我們要?jiǎng)h除哪一行數(shù)據(jù)煌茬。
那么比如說(shuō)我們想刪除news表中id為2的記錄,就可以這樣寫:
DataSupport.delete(News.class,?2);
deleteAll()方法接收兩個(gè)參數(shù)彻桃,第一個(gè)參數(shù)是Class坛善,傳入我們要?jiǎng)h除的那個(gè)類的Class就好,第二個(gè)參數(shù)是一個(gè)conditions數(shù)組邻眷,用于指定刪除哪些行的約束條件眠屎,返回值表示此次刪除了多少行數(shù)據(jù),用法和updateAll()方法是基本相同的肆饶。
而如果我們想把news表中所有的數(shù)據(jù)全部刪除掉改衩,就可以這樣寫:
DataSupport.deleteAll(News.class);?
查詢操作
首先是調(diào)用了DataSupport的where()方法,在這里指定了查詢條件驯镊。where()方法接收任意個(gè)字符串參數(shù)葫督,其中第一個(gè)參數(shù)用于進(jìn)行條件約束,從第二個(gè)參數(shù)開(kāi)始板惑,都是用于替換第一個(gè)參數(shù)中的占位符的橄镜。那這個(gè)where()方法就對(duì)應(yīng)了一條SQL語(yǔ)句中的where部分。
List?newsList?=?DataSupport.select("title",?"content")??
.where("commentcount?>??",?"0")??
.order("publishdate?desc").find(News.class);??
order()方法中接收一個(gè)字符串參數(shù)冯乘,用于指定查詢出的結(jié)果按照哪一列進(jìn)行排序洽胶,asc表示正序排序,desc表示倒序排序裆馒,因此order()方法對(duì)應(yīng)了一條SQL語(yǔ)句中的order by部分
篩選查詢 剛才我們查詢到的是所有匹配條件的前10條新聞姊氓,那么現(xiàn)在我想對(duì)新聞進(jìn)行分頁(yè)展示丐怯,翻到第二頁(yè)時(shí),展示第11到第20條新聞他膳,這又該怎么實(shí)現(xiàn)呢响逢?沒(méi)關(guān)系,在LitePal的幫助下棕孙,這些功能都是十分簡(jiǎn)單的舔亭,只需要再連綴一個(gè)偏移量就可以了,如下所示:
List?newsList?=?DataSupport.select("title",?"content")??
.where("commentcount?>??",?"0")??
.order("publishdate?desc").limit(10).offset(10)??
.find(News.class);??
可以看到蟀俊,這里我們又添加了一個(gè)offset()方法钦铺,用于指定查詢結(jié)果的偏移量,這里指定成10肢预,就表示偏移十個(gè)位置矛洞,那么原來(lái)是查詢前10條新聞的,偏移了十個(gè)位置之后烫映,就變成了查詢第11到第20條新聞了沼本,如果偏移量是20,那就表示查詢第21到第30條新聞锭沟,以此類推抽兆。因此,limit()方法和offset()方法共同對(duì)應(yīng)了一條SQL語(yǔ)句中的limit部分族淮。
進(jìn)查詢的用法非常簡(jiǎn)單辫红,就只有這么多,其它find()方法也都是同樣的用法祝辣,就不再重復(fù)介紹了贴妻。但是這種查詢方式LitePal并不推薦,因?yàn)槿绻坏╆P(guān)聯(lián)表中的數(shù)據(jù)很多蝙斜,查詢速度可能就會(huì)非常慢名惩。而且激進(jìn)查詢只能查詢出指定表的關(guān)聯(lián)表數(shù)據(jù),但是沒(méi)法繼續(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);??
????}??
}??