LitePal数据的存储

版权声明:转载附上链接 https://blog.csdn.net/generallizhong/article/details/89178021

这里来完整地学习一下LitePal存储数据的所有用法。

1、在上一篇中我们只建了News一张表,如需要建多张表一样的操作,使用LitePal就可以把相应的表自动创建出来

2、继承了DataSupport类之后

这些实体类就拥有了进行CRUD操作的能力,那么比如想要存储一条数据到news表当中,可以这样:

 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类中继承而来的了

看到了那个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 

猜你喜欢

转载自blog.csdn.net/generallizhong/article/details/89178021