本文知識點介紹
- LitePal的集成和簡單的使用
- LitePal中實現增刪改查
- LitePal一些常用的API介紹
- LitePal的總結
1.LitePal的集成
LitePal是郭霖大神寫的,這里知識簡單的使用,如果有什么不對的地方希望大家指出. 項目源碼地址
1.1LitePal的集成
- 引入相應的類庫
- 創(chuàng)建litepal.xml
- 更換繼承的Application
1.1.1引入相應的類庫
compile 'org.litepal.android:core:1.6.1'
這個可以去項目源碼中找到最新的類庫
1.1.2創(chuàng)建相應的litepal.xml文件
首先這個文件是在相應的assets文件夾下(創(chuàng)建方法為項目文件夾下New->Folder->Assets Folder就可以創(chuàng)建相應的assets文件夾了),然后在assets文件夾下創(chuàng)建一個相應的litepal.xml文件夾,下面是具體的內容:
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="file"/>
<version value="1"/>
<list>
<mapping class="com.hejin.download.FileInfo"/>
</list>
</litepal>
這里說明幾點問題:
- dbname標簽是相應的數據庫名稱
- version標簽是相應的數據庫的版本,這里注意當里面引用的內容發(fā)生改變的時候,要升級相應的版本
- list標簽是那些對象需要數據庫管理,這里注意mapping里面的路徑一定要是全路徑名稱
- 這里面list標簽中的實體類都應該繼承DataSupport這個類,這個千萬別忘記
1.1.3更換繼承的Application
這里其實份兩種情況:
- 已經有繼承的Application
- 直接繼承LitePalApplication
為什么分為這兩種情況呢?因為有的項目中可能之前實現Application已經繼承了一個其他類型的Application了,那么這個時候因為java的單繼承,所以這里就不能直接繼承LitePalApplication了,但是LitePal已經幫我們想到這個問題了,所以說下面我們分兩種情況實現一下:
- 第一種
直接在相應項目中的Application中的onCreat()方法中初始化一下就可以了,像下面這樣:
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
這樣你的Application可以隨便繼承其他的Application
在manifest.xml中引入相應的Application,也就是你之前的Application
- 第二種
直接繼承相應的LitePalApplication這里就不用在onCreat()中調用LitePal.initialize(this);這個方法了;
這個就比較特殊了要在相應的application標簽中添加Application的時候要這樣寫android:name="org.litepal.LitePalApplication"
上面這些方法的話就基本上可以實現相應的初始化就完成了
2.LitePal中實現增刪改查
2.1LitePal添加數據
關于相應的增加操作,這里主要是通過對象的save()進行的,怎么說呢?其實你只要給相應的類添加了相應的集體參數然后調用相應的save()方法就可以了.具體代碼如下:
LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
zhangSanBean.save();
LitePalBean liSiBean = new LitePalBean("李四", "25", "男");
liSiBean.save();
這樣就形成了相應的數據庫的表結構了,也就是有了相應的數據庫了,但是如果你在手機上調試的不Root的話是看不到的.這里說明一個問題添加相同的內容是可以添加進去的
2.2LitePal刪除數據
關于刪除數據的操作,這里主要是通過對象的delete()或者deleteAll()進行刪除,具體代碼如下:
/*這里就是刪除所有名字是張三的*/
DataSupport.deleteAll(LitePalBean.class, "name =?", "張三");
LitePalBean zhangSanBean = new LitePalBean("張三", "20", "男");
zhangSanBean.save();
zhangSanBean.delete();
這里刪除的兩種方式:
- 直接對象刪除:也就是對象直接調用delete();方法進行;
- 根據類型進行刪除,其實這里就是相當于SQLite進行刪除,這里有必要說明一下第二個語句傳入內容如果為"name=?"代表的是所有name為后面字段的內容,也就是所有名字為張三的內容都會刪除.那么你會問了如果這里面我傳入兩個內容呢?比如"name=? and age=?"對沒錯,就是用and進行連接
2.3LitePal更新數據
這里其實很簡單,就是更改完相應的數據直接save保存就可以了,代碼如下:
LitePalBean zhaoWuBean = new LitePalBean("趙五", "25", "男");
zhaoWuBean.save();
zhaoWuBean.setAge("30");
zhaoWuBean.save();
這里有一個問題,感覺應該是先取出來這個對象在進行操作才對,才能確保內容的正確性.
2.4LitePal查詢方法
關于查詢數據的操作,主要用到find()和findAll()等相應的方法,具體代碼如下:
List<LitePalBean> all = DataSupport.findAll(LitePalBean.class);
for (int i = 0; i < all.size(); i++) {
Log.e(TAG, "query: " + all.get(i).toString());
}
}
這里只是查詢出所有的內容進行相應的打印
3.LitePal常用的API
DataSupport.findFirst(XXX.class)
查詢XXX列表中的第一個元素DataSupport.findLast(XXX.class)
查詢XXX列表中的最后一個元素DataSupport.select()
根據SQLite中的關鍵字進行查找,例如DataSupport.select("name","age").find(XXX.class) 查詢的是相應名字和年齡的兩列數據 其他的數據是查不出來的.DataSupport.where()
相當于SQLite中的where關鍵字查找,這里還是舉個例子->DataSupport.where("name=?","張三").find(XXX.class) 查詢的是所有名字為張三的數據內容;DataSupport.order()
相當于SQLite中的order關鍵字查找,主要是排序方式,這里還是舉個例子->DataSupport.order(price desc).find(XXX.class) 這里面是按照降序進行排列的;desc標識降序排列,**asc
**代表升序排列DataSupport.limit()
查詢數據庫的結果的數量 例子->DataSupport.limit(3).find(XXX.class); 查詢3條數據DataSupport.offset()
查詢制定結果的偏移量 例子(我想查詢第二條第三條和第四條)-> DataSupport.limit(3).offset(1).find(XXX.class); 這里是從第一條開始,但是不包含相應的第一條
上面的內容可以都是可以連起來查的,寫法和構建者的模式類似
當然LitePal也支持相應的原生查找DataSupport.findBySQL(),但是這里返回一個相應的Cursor對象,要根據SQLite的方式取出相應的內容,這里面就不去講解了,其實是我不會...