《第一行代码》阅读笔记(二十二)——LitePal操作数据库

摘要:
最后,在AndroidManifest中添加属性android:name=“org.litepal.LitePalApplication”。xml来创建和更新数据库。步骤1:创建实体类LitePal的强大之处在于它可以映射对象。事实上,这是大多数数据库框架的作用。您不需要像上一节那样在abb中操作数据库,而是直接使用对象。通常有两种情况。第一个是save,第二个是Litepal查询API。第二种方法是通过updateAll()。在查阅了官方API之后,我们学会了删除一个单曲,并使用LitePal。删去要删除多个数据,请使用LitePal。deleteAll(Book.class,“name=?LitePal.findBySQL());但是,请注意这里的返回值是Cursor。

这里郭神又是一顿称赞,反正强无敌就行了。笔者也咨询了一些大神、专家。对于初学者来说这个框架不仅十分方便,足以应付需求,而且郭神讲解通俗易懂,值得一看。
附上Github链接:https://github.com/LitePalFramework/LitePal

配置LitePal

总结起来就是一句话(最新版的需要去github上面找)
implementation 'org.litepal.guolindev:core:3.1.1'

在该目录下新建litepal.xml

《第一行代码》阅读笔记(二十二)——LitePal操作数据库第1张

并输入以下内容

<?xml version="1.0" encoding="utf-8" ?>
<litepal>
    <dbname value="BookStore" />
    <version value="1" />

    <list>
        
    </list>

</litepal>

其中,标签用于指定数据库名,标签用 于指定数据库版本号,标签用于指定所有的映射模型,我们稍后就会用到。

最后在AndroidManifest.xml添加属性
android:name="org.litepal.LitePalApplication"

新建和更新数据库

第一步:创建实体类

LitePal的强大之处就在于可以和对象映射,其实这也是大部分数据库框架的作用所在,不需要像上节一样在abd里面操作数据库了,而是直接使用对象。所以我们先新建一个Book类,设定好属性。

package com.firstcode.databasetest;

public class Book {

    private int id;
    private String author;
    private double price;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

第二步:在litepal.xml添加映射关系

    <list>
        <mapping   />
    </list>

我感觉目前来说比mybatis简单一些,这个映射关系很好理解,就是上一节我们建立的数据库中的每个字段会和类中的每个属性结合起来。

第三步:在MainActivity中生成一个数据库

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final Button createDatabase = (Button) findViewById(R.id.create_database);
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Connector.getDatabase();
            }
        });
    }
}
更新一个数据库

操作十分简单,只需要更新相应的类中的属性,或者新建一个类,在配置文件中增加映射,然后将<version value="1" />中的value变成2就行了。

添加数据

同样非常简单。

第一步:继承DataSupport
其实这个类已经被弃用了,改成了LitePalSupport

public class Book extends LitePalSupport 

第二步:
新建一个Book类并且设置好值,再save一下就行了。

Book book = new Book();
                book.setAuthor("The Da Vinci Code");
                book.setId(454);
                book.setName("Dan Brown");
                book.setPrice(16.96);
                book.save();
修改数据

修改数据有两种方式,第一种就是更改book的属性值再save一下。如下

Book book = new Book();
                book.setAuthor("The Lost Symbol");
                book.setId(510);
                book.setName("Dan Brown");
                book.setPrice(19.96);
                book.save();
                book.setPrice(10.99);
                book.save();

但是这样操作有个限制,就是已存储的对象才能使用这个方法修改。什么是已存储的对象呢,就是调用 book.isSaved()返回true的对象。一般有两种情况,第一种就是save的,第二种就是litepal查询API查询出来的。

第二种方式就是通过updateAll()。如下

Book book1 = new Book();
                book1.setPrice(10.99);
                book1.updateAll("name = ?","The Lost Symbol");     

注意事项:

  1. setToDefault()方法可以将对象设置成默认值
  2. update()方法不带参数的时候是对所有的参数进行更新
删除数据

更改成LitePalSupport后,删除数据有所不同,不能在使用以前的方法了。查阅官方API后得知删除单个,使用LitePal.delete(Book.class, 2);
删除多个数据,使用
LitePal.deleteAll(Book.class, "name = ?", "The Lost Symbol");
第一个参数就是操作对象的class文件,然后第二个参数可以是主键id,或者是条件语句,如果是条件语句,第三个参数就是占位符的值。

查找数据

和删除相似,查找一个数据使用
Book book = LitePal.find(Book.class, 2);
查找多个使用findAll
List books = LitePal.findAll(Book.class);

但是查询的方式多种多样,LitePal也为我们提供了更多的接口。如下图所示

《第一行代码》阅读笔记(二十二)——LitePal操作数据库第2张

但是这些都比较老了,让我们看看官网的例子吧

List<Song> songs = LitePal
                        .where("name like ? and duration < ?", "song%", "200")
                        .order("duration")
                        .find(Song.class);

这种格式排布就非常像数据库了。

SQL查询

他也同样支持原生SQL的查询,调用下面的语句即可。
LitePal.findBySQL();
但是注意这里的返回值是Cursor。操作就和SQLDataBase一样了

至此Android的数据库操作学习就告一段落了。

免责声明:文章转载自《《第一行代码》阅读笔记(二十二)——LitePal操作数据库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Netty 业务处理:ChannelHandler家族Docker简易安装与使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

来电科技:基于Flink+Hologres的实时数仓演进之路

简介: 本文将会讲述共享充电宝开创企业来电科技如何基于Flink+Hologres构建统一数据服务加速的实时数仓 作者:陈健新,来电科技数据仓库开发工程师,目前专注于负责来电科技大数据平台离线和实时架构的整合。   深圳来电科技有限公司(以下简称“来电科技”)是共享充电宝行业开创企业,主要业务覆盖充电宝自助租赁、定制商场导航机开发、广告展示设备及广告传...

Oracle:外键关联导致数据无法删除

手动删除数据库中冗余数据可能遇到外键关联导致数据无法删除的问题。这个问题的解决及思考记录如下:    问题的产生是因为在数据库设计的时候,在建立外键关联的时候没有设置级联删除,也就是说在设置外键的时候并没有加上on delete cascade限定。对于这个问题,我的想法是:在数据库设计的时候一般情况下都是应该加上这样的限制的。如果说担心“级联删除”可能会...

全基因组测序及数据分析基础

华大的春季培训课程之一:https://ke.qq.com/course/1128997?taid=7160092735650341,我认为讲得很好,介绍全面而详细,加了一些个人经验(侵删)。 流程众多,对于结果会有一些差异,尤其是对低频变异。如果很关注低频位点,可多种几款流程比较。 实际上SV结果中会包含CNV,但往往会把CNV单独拿出来...

入选 SIGMOD2021 的时间序列多周期检测通用框架 RobustPeriod 如何支撑阿里业务场景?

简介: 本文除了介绍RobustPeriod的核心技术亮点,还将重点解释如何将它构筑成服务来解决阿里云的业务痛点。 近日,由阿里云计算平台和阿里云达摩院合作的时序多周期检测相关论文RobustPeriod: Robust Time-Frequency Mining for Multiple Periodicity Detection被SIGMOD 2021...

java 数据设置和显示

1. 首先设置ModelAndView 的值 @Override public ModelAndView handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception { ModelAndView mv = new Mod...

easyui 只刷新当前页面的数据 datagrid reload 方法

$('#refreshbtn').click(function() { $("#t_auclot").datagrid("reload",serializeForm($('#mysearch'))); }); <a class="easyui-linkbutton">刷新</a> easyui dat...