LitePal數據的存儲

這裏來完整地學習一下LitePal存儲數據的全部用法。java

一、在上一篇中咱們只建了News一張表,如須要建多張表同樣的操做,使用LitePal就能夠把相應的表自動建立出來ide

二、繼承了DataSupport類以後學習

這些實體類就擁有了進行CRUD操做的能力,那麼好比想要存儲一條數據到news表當中,能夠這樣:this

public void SaveData() {
        News n = new News();
        n.setId(1);//可不用這個ID
        n.setTitle("這裏是標題");
        n.setContent("內容");
        n.setPublishDate(new Date());
        n.setCommentCount(1);
        Issave = n.save();//返回值
    }

很好操做的幾行代碼,這裏不須要SQLiteDatabase,不須要ContentValues,不須要經過列名組裝數據,甚至不須要指定表名,只須要new出一個News對象,而後把要存儲的數據經過setter方法傳入,最後調用一下save()方法就行了,而這個save()方法就是從DataSupport類中繼承而來的了3d

看到了那個save()方法,save()方法仍是有返回值的,咱們能夠根據返回值來判斷存儲是否成功code

if (Issave) {
            Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(MainActivity.this, "失敗啦", Toast.LENGTH_SHORT).show();
        }

三、save()方法返回的是一個布爾值,用於表示存儲成功仍是失敗,但同時也說明這個方法是不會拋出異常的。若是要存儲失敗的話就拋出異常,而不是返回一個false,那就還能夠用另外一個saveThrows()方法來代替對象

public void SaveData() {
        News n = new News();
        n.setId(1);
        n.setTitle("這是標題");
        n.setContent("內容");
        n.setPublishDate(new Date());
        n.setCommentCount(1);
        n.saveThrows();
    }

saveThrows()方法來存儲數據,一旦存儲失敗就會拋出一個DataSupportException異常,咱們能夠經過對這個異常進行捕獲來處理存儲失敗的狀況blog

四、使用的insert()方法來存儲數據時是有返回值的,返回的是插入行對應的id。但LitePal中的save()方法返回的是布爾值,那麼我要拿到存儲成功以後這條數據對應的id,因此,LitePal使用了一種比較好的的作法,咱們在每一個實體類中都定義了一個id字段,當調用save()方法或saveThrows()方法存儲成功以後,LitePal會自動將該條數據對應的id賦值到實體類的id字段上。繼承

public void SaveData() {
        News n = new News();
        n.setId(1);
        n.setTitle("這是標題");
        n.setContent("這是內容");
        n.setPublishDate(new Date());
        n.setCommentCount(1);
        Log.d("TAG", "ID是 " + n.getId());
        Issave = n.save();
        Log.d("TAG", "ID是 " + n.getId());
    }

這裏在save以前打印一下news的id,在save以後再打印一次,而後運行:get

在save以前打印的id,,在save以後打印的id,說明此時id已經被賦值了

五、LitePal對集合數據的存儲還專門提供了一個方法,好比說咱們有一個News集合,那麼應該怎樣去存儲這個集合中的每條News

List<News> newsList; 
... 
for (News news : newsList) { 
    news.save(); 
}

那麼經過一個循環來遍歷出這個集合中的每個News對象,而後逐個調用save()方法。這樣的寫法固然是能夠的,可是效率會相對來講低一些,由於調用save()方法的時候除了會執行存儲操做以外,還會去分析News類的關聯關係,那麼每次循環都去從新分析一遍關聯關係顯然是比較耗時的。所以,LitePal提供了一個saveAll()方法,專門用於存儲集合數據的

List<News> newsList; 
... 
DataSupport.saveAll(newsList);

saveAll()方法接收一個Collection集合參數,只須要把待存儲的集合數據傳入就能夠。

DEMO下載:

CSDN:下載

百度網盤下載:下載  提取碼:e1ey 

相關文章
相關標籤/搜索