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