LitePal数据的存储
這里來完整地學習一下LitePal存儲數據的所有用法。
1、在上一篇中我們只建了News一張表,如需要建多張表一樣的操作,使用LitePal就可以把相應的表自動創建出來
2、繼承了DataSupport類之后
這些實體類就擁有了進行CRUD操作的能力,那么比如想要存儲一條數據到news表當中,可以這樣:
public void SaveData() {News n = new News();n.setId(1);//可不用這個IDn.setTitle("這里是標題");n.setContent("內容");n.setPublishDate(new Date());n.setCommentCount(1);Issave = n.save();//返回值}很好操作的幾行代碼,這里不需要SQLiteDatabase,不需要ContentValues,不需要通過列名組裝數據,甚至不需要指定表名,只需要new出一個News對象,然后把要存儲的數據通過setter方法傳入,最后調用一下save()方法就好了,而這個save()方法就是從DataSupport類中繼承而來的了
看到了那個save()方法,save()方法還是有返回值的,我們可以根據返回值來判斷存儲是否成功
if (Issave) {Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_SHORT).show();} else {Toast.makeText(MainActivity.this, "失敗啦", Toast.LENGTH_SHORT).show();}3、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異常,我們可以通過對這個異常進行捕獲來處理存儲失敗的情況
4、使用的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之后再打印一次,然后運行:
在save之前打印的id,,在save之后打印的id,說明此時id已經被賦值了
5、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?
?
總結
以上是生活随笔為你收集整理的LitePal数据的存储的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vs/c++缓冲区溢出,未初始化变量检查
- 下一篇: 高通董事长:努力降低智能手机价格