數據庫LitePal使用教程

開源數據庫LitePal的使用教程

開源地址:https://github.com/LitePalFramework/LitePal

一. LitePal的快速配置

1. 引入Jar包或源碼

使用Android Studio在項目的build.gradle中添加:

dependencies {
    compile 'org.litepal.android:core:1.3.0'
}

使用Eclipse到這裏下載好了jar包之後,把它複製到項目的libs目錄中就算是引入成功了。

2. 配置litepal.xml

在項目的assets目錄下面新建一個litepal.xml文件,內容如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="demo" ></dbname>  
 
    <version value="1" ></version>  
 
    <list>  
        <mapping class="org.litepal.litepalsample.model.Album"></mapping>
        <mapping class="org.litepal.litepalsample.model.Song"></mapping>
    </list>  
</litepal>

————————標籤說明—————————

<dbname>是數據庫的名字
<version>是數據庫的版本號
<list>是數據庫的映射模型(數據庫表)
<mapping>是數據庫的映射模型的地址(數據庫表結構)

3. 配置LitePalApplication

在AndroidManifest.xml中配置LitePalApplication,如下:

<manifest>  
    <application  
        android:name="org.litepal.LitePalApplication"  
        ...  
    >  
    ...  
    </application>  
</manifest>

如果已經有自己的Application,那麼久繼承一下就好了,如下:

public class MyApplication extends LitePalApplication {  
    ...  
}

 

二. LitePal的建表

根據對象關係映射模式的理念,每一張表都應該對應一個模型(Model),建表先要新建一個模型類,新建一個DEST類,如下:

public class DEST extends DataSupport {
    private String destId;//目的地ID
    private String cnName;//中文名
    private String enName;//英文名
    private String parentId;
    private String childrenId;
    private long updateTime;
 
    // 自動生成get、set方法  
}

LitePal的映射規則是非常輕量級的,不像一些其它的數據庫框架,需要爲每個模型類單獨配置一個映射關係的XML,LitePal的所有映射都是自動完成的。根據LitePal的數據類型支持,可以進行對象關係映射的數據類型一共有8種,int、short、long、float、double、boolean、String和Date。只要是聲明成這8種數據類型的字段都會被自動映射到數據庫表中,並不需要進行任何額外的配置。

注意
只有private修飾的字段纔會被映射到數據庫表中,即如果有某一個字段不想映射的話,就設置爲public、protected或者default修飾符就可以了。

 

建立好Model後,我們就把他配置到映射列表中,即編輯assest目錄下的litepal.xml文件,在<list>標籤中加入DEST類的聲明,這裏要注意,要類的完整類名。

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="white" ></dbname>  
 
    <version value="1" ></version>  
 
    <list>  
        <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
    </list>  
</litepal>

到這裏,就完成了LitePal數據庫的配置。

三. LitePal的升級表

1.添加新表
首先創建一個新的模型類,然後把它設置到litepal.xml中,如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="white" ></dbname>  
 
    <version value="1" ></version>  
 
    <list>  
        <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
        <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
    </list>  
</litepal>

然後,把litepal.xml中的version的值加一即可,如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="white" ></dbname>  
 
    <version value="2" ></version>  
 
    <list>  
        <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
        <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
    </list>  
</litepal>

2.舊錶添加新列
首先在需要升級的模型類中添加新的private修飾的字段,如下:

public class DEST extends DataSupport {
    private String destId;//目的地ID
    private String cnName;//中文名
    private String enName;//英文名
    private String parentId;
    private String childrenId;
    private long updateTime;
    private String imagePath;//(新增加的列)
 
    // 自動生成get、set方法  
}

然後再把litepal.xml中的version的值加一即可,如下:

<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="white" ></dbname>  
 
    <version value="3" ></version>  
 
    <list>  
        <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
        <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
    </list>  
</litepal>

 

四. LitePal的存儲操作

LitePal要存儲數據,首先模型類要繼承DataSupport,即:

public class DEST extends DataSupport {
 
}

繼承了DataSupport類之後,這些實體類就擁有了進行CRUD操作的能力。

 

存儲操作:

DEST mDest = new DEST();  
mDest.setDestId("123421");  
mDest.save();

並且save()操作是有返回值的,所以可以這樣:

if (mDest.save()) {  
    Toast.makeText(context, "存儲成功", Toast.LENGTH_SHORT).show();  
} else {  
    Toast.makeText(context, "存儲失敗", Toast.LENGTH_SHORT).show();  
}

五. LitePal的修改操作

如果想把DEST表中id爲4的destId改爲"1",可以這樣寫:

ContentValues values = new ContentValues();  
values.put("destId", "1");  
DataSupport.update(DEST.class, values, 4);  
 
//或者用下面這種方法
 
DEST updateNews = new DEST();  
updateNews.setDestId("1");  
updateNews.update(4);

 

如果想把DEST表中所有destId爲"1"的改爲"2"可以這樣寫:

ContentValues values = new ContentValues();  
values.put("destId", "2");  
DataSupport.updateAll(DEST.class, values, "destId = ?", "1");  
 
//或者用下面這種方法
 
DEST updateNews = new DEST();  
updateNews.setdestId("2");  
updateNews.updateAll("destId = ?", "1");

 

六. LitePal的刪除操作

比如說我們想刪除DEST表中id爲2的記錄,就可以這樣寫:

DataSupport.delete(News.class, 2);

 

想把DEST表中destId爲“1”的所有數據刪除,就可以這樣寫:

DataSupport.deleteAll(DEST.class, "destId = ? ", "1");

 

如果我們想把DEST表中所有的數據全部刪除掉,就可以這樣寫:

DataSupport.deleteAll(DEST.class);

 

七. LitePal的查詢操作

查詢DEST表中id爲1的這條記錄,使用LitePal就可以這樣寫:

DEST mDest = DataSupport.find(DEST.class, 1);

 

想要獲取DEST表中的第一條數據,只需要這樣寫:

DEST firstDest = DataSupport.findFirst(DEST.class);

 

想要獲取News表中的最後一條數據,只需要這樣寫:

DEST lastDest = DataSupport.findLast(DEST.class);

 

想把DEST表中id爲1、3、5、7的數據都查出來,只需要這樣寫:

List<DEST> mDestList = DataSupport.findAll(DEST.class, 1, 3, 5, 7);

 

查詢所有數據,只需要這樣寫:

List<DEST> mDestList = DataSupport.findAll(DEST.class);

 

想查詢DEST表中所有父類id爲"1"的數據,就可以這樣寫:

List<DEST> mDestList = DataSupport.where("parentId = ?", "1").find(DEST.class);

 

許你並不需要那麼多的數據,而是隻要cnName和enName這兩列數據。那麼也很簡單,我們只要再增加一個連綴就行了,如下所示:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").find(DEST.class);

 

也許你還要數據按照添加的時間倒序排列,那麼可以這樣:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").find(DEST.class);

 

數據太多了,其實你只要前10行就行了,那麼可以這樣:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").limit(10).find(DEST.class);

 

如果我們想進行分頁展示,那麼翻頁了,怎麼辦?可以添加一個偏移量就好了,這樣:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").limit(10).offset(10).find(DEST.class);

 

八. LitePal的聚合函數

count()
如果想統計行數,那麼就可以調用count()即可:

int result = DataSupport.count(DEST.class);

如果想統計parentId爲"1"的數據的行數,那麼可以這樣:

int result = DataSupport.where("parentId = ?", "1").count(DEST.class);

 

sum()
如果想統計一下DEST表中,所有updateTime的和(雖然毫無用處....),那麼可以這樣:

long result = DataSupport.sum(DEST.class, "updateTime", long.class);

 

注意
第一個參數很簡單,還是傳入的Class,用於指定去統計哪張表當中的數據。第二個參數是列名,表示我們希望對哪一個列中的數據進行求合。第三個參數用於指定結果的類型,這裏我們指定成int型,因此返回結果也是int型。
sum()方法只能對具有運算能力的列進行求合,比如說整型列或者浮點型列,如果你傳入一個字符串類型的列去求合,肯定是得不到任何結果的,這時只會返回一個0作爲結果。

 

剩下的聚合函數方法大同小異了:
average()
max()
min()
...

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章