LitePal 简单使用

配置LitePal

添加依赖

在我们的build.gradle文件下的dependencies下面添加

implementation 'org.litepal.guolindev:core:3.2.3'

如图:
在这里插入图片描述

传递Context变量

但我们用原生的Sql语句进行数据存储的时候,我们需要进行大量的传递Context变量,确实很麻烦,当时litepal完全省略了这些麻烦的过程,我们只需要在AndroidManifest文件中配置一下代码

android:name="org.litepal.LitePalApplication"

在这里插入图片描述

创建assets资源文件夹

1 你的Android切换成Project,2选中你的Model右键–>New–>Directory然后输入assets然后选择src/main/assets
在这里插入图片描述
在这里插入图片描述
2.在assets文件夹下创建litepal.xml文件夹
在这里插入图片描述
3.把一下代码复制进litepal.xml文件中

<?xml version="1.0" encoding="UTF-8" ?>
<litepal>
<!--    数据库名称-->
    <dbname value="db_weather"/>
<!--    数据库版本-->
    <version value="1"/>
<!--   在mapping中引用数据库表的完整类名,用于创建数据库表,有几张表就需要有几个mapping-->
        <list>
            <mapping class="com.litepal.datatable.City"/>
        </list>
</litepal>

4.创建表,就是创建一个类,如我想创建一个City表,我就添加一个CIty类,并把City的完成类名添加到litepal.xml文件中
在这里插入图片描述

以上配置已基本完成,下面就需要创建数据库了

创建数据库

调用一下代码,数据库就创建完成了

SQLiteDatabase db = Connector.getDatabase();

至此数据库应该已经创建完成,我们在Android studio 中打开Device File Explorer找到我们的data然后在打开data之后就可以看到我们多出一个com.litepal(看你自己的包名)
在这里插入图片描述

修改数据库表

当我们创建完数据库表,但是发现创建错了,需要添加新表,或者需要修改原有数据库表的字段,怎么办呢?

1.例如我想添加一个新的Comment表怎么办呢,首先和刚才一样,创建一个Comment类,并把Comment类的完整类名添加到litepal.xml文件中。
2.把版本号加1(在表中添加新字段和此步骤一样
在这里插入图片描述
3.在重现调用一下SQLiteDatabase db = Connector.getDatabase();代码数据库就就修改完成了

删除数据库

直接把litepal.xml文件中对这个表的类引用删除,然后把version的value加1即可

建立表关联

表于表之间建立关系,请参考本篇文章

表与表之间的对应关系,分为一对一,多对一,多对多关系,但我们需要用litepal,怎么建立这种关系呢?
其实litepal创建表是通过类来映射的,一个类就是一张表,那这样我们就好办了,我们可以通过类与类之间的关联,来建立表与表的关联.
例如,一条新闻只能对应一条导语,那我们直接在新闻中引用一下导语
例如
在这里插入图片描述
或者也可以在导语类中引用新闻类

那多对一关系又怎么办呢?
例如一条新闻可以包含多条评论,但是一条评论只能对应一条新闻,我们可以再新闻中引用一个评论的集合,在评论中引用新闻就可以啦
评论类:
在这里插入图片描述
新闻类:
在这里插入图片描述
再比如 多对多关系又怎么办呢,聪明的你肯定想到了,那就是在各自的类中相互引用对方的集合
一条新闻可以是多种类别,一个类别可以包含多条新闻

新闻类:
在这里插入图片描述
类别类:
在这里插入图片描述

数据库操作

在进行数据库操作之前,我们需要对数据库表的类进行一下继承
,他们需要继承自LitePalSupport

插入

插入数据非常简单,真的你要相信我,我都被他吓的大吃一惊

		News news=new News();
        news.setTitle("我是一条新闻");
        news.setContent("我是新闻内容");
        news.save();

对,到此已经结束了,已经保存到数据库了,真的,要相信自己
当时他的功能不仅如此
他还有返回值

news.save();的返回值是boolean值

news.saveThrows();如果存储失败会抛出异常,需要用try catch处理

那么多对一关系到底是怎么是怎么插入的呢?
例如;我们有两条评论对应一条新闻

Comment comment1 = new Comment();
        comment1.setContend("好评");
        comment1.setPublishDate(System.currentTimeMillis());
        comment1.save();
        Comment comment2 = new Comment();
        comment2.setContend("好评");
        comment2.setPublishDate(System.currentTimeMillis());
        comment2.save();

        News news = new News();
        news.setTitle("我是二条新闻");
        news.setContent("我是新闻内容");
        news.getCommentList().add(comment1);//建立对应关系
        news.getCommentList().add(comment2);//建立对应关系
        news.setCommentCount(news.getCommentList().size());
        
        if (news.save()) {
            Toast.makeText(this, "我的编号是" + news.getId(), Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(this, "存储失败", Toast.LENGTH_SHORT).show();
        }

但我们有一个news的集合我们怎么插入呢?litepal给我们提供了一个saveAll()的方法

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

删除

	LitePal.deleteAll(Class<?> modelClass, String... conditions)
	//返回值是删除数据的条数,
	//第一个参数是类名
	//第二个参数是 String型的数组,相当于where 后面的语句

例如我想删除title="我爱晏传利"并且content="就是爱你"的新闻

LitePal.deleteAll(News.class,"title=? and content=?","我爱晏传利","就是爱你");

这样子就可以了
注意:当有外键的时候,把本条数据删除了,和外键相关联的数据也会一并删除

更改

LitePal.updateAll(Class<?> modelClass, String... conditions)
	//返回值是修改数据的条数,
	//第一个参数是类名
	//第二个参数是 String型的数组,相当于where 后面的语句

用法和删除一样

查询

查询第一条数据

News news=findFirst(News.class)

查询最后一条数据

News news =LitePal.findLast(News.class);

查询所有数据

ArrayList<News> newsList = (ArrayList) (LitePal.findAll(News.class));

查询的艺术可以继续参考这篇文章

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~搬~运~工~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值