Android数据存储方案——LitePal数据库框架

概述:LitePal 是一个开源 Android 数据库框架,它采用了对象关系映射的模式(ORM),将我们开发常用的数据库功能进行了封装,即使你不懂SQL语句,也可以对数据库完成增删改查等操作。

问题:上文提到了对象关系映射的模式(ORM), 那这到底是啥呢?

安卓开发使用的是面向对象的编程语言,而使用的数据库却是关系型数据库,那么面向对象的语言和面向关系的数据库之间建立的一种映射关系,就是对象关系映射。这种模式可以让我们用面向对象的思维来操作数据库,可以不用SQL语句进行数据库操作,这就是它的强大之处。

下面将会讲解LitePal框架的配置和使用LitePal对数据库的增删改查功能。

一:配置LitePal。

步骤:

1.下载LitePal框架,地址为:https://github.com/LitePalFramework/LitePal

点击clone or download按钮,下载zip文件,文件只有6M左右。

2.将zip文件解压后,在LitePal-master\downloads目录下有很多以 .jar 结尾的文件,将版本号最大的 src.jar 文件拷贝添加到AndroidStudio 下 app/libs目录中。然后点击添加的 jar 文件, 右键——>Add As Library——>ok。这样 litePal 数据库框架就添加到了你得项目中了。

3.配置litepal.xml文件。

在AndroidStudio 中右击 app/src/main 目录——>New——>Directory,创建一个 assets 目录,然后右击 assets 目录——>New——>File,创建litepal.xml文件,加上后缀。

4.litepal.xml文件是空的,需要编辑如下内容。

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

上面代码中<list>属性里面暂时为空,这是用来将类添加到映射模式中去的,后面会配置。上面 dbname 表示数据库名字,virsion 表示数据库版本号,这里写1就可以。

5.由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了。配置代码在第二行。

<application
        android:name="org.litepal.LitePalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

LitePal 配置到这里就完成了。下面讲解创建数据库。

二:创建数据库。

LitePal 是使用面向对象的思维方式来操作数据库的,创建数据库方法就是定义类,下面定义一个Book类,在数据库中就是Book表了。

1.定义Book类。并且写上所有成员变量的setter和getter方法。

(自动添加setter和getter方法为:在空白区域单击右键——>Generate——>选择setter和getter——>按住shift键选择需要设置的成员变量。)

package com.example.shinelon.litepaltest;

import org.litepal.crud.LitePalSupport;

public class Book extends LitePalSupport {

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

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

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

上面的 Book 类继承自 LitePalSupport。注意不是继承 DataSupport,在LitePal2.0.0 版本时弃用DataSupport,改为使用LitePalLitePalSupport。如下:

2.修改 litepal.xml 文件。即在<list>属性里面加上需要映射的类,我们这里就是Book类了。需要注意的是一定要根据自己的包名来写路径。我这里是 com.example.shinelon.litepaltest.Book。

<?xml version="1.0" encoding="utf-8" ?>
<litepal>
    <dbname value="BookStore"></dbname>
    <version value="1"></version>
    <list>
        <mapping class="com.example.shinelon.litepaltest.Book"></mapping>
    </list>
</litepal>

3.调用LitePal.getDatabase(); 语句完成数据库的创建。

 LitePal.getDatabase();

这样就成功创建了一个数据库了,下面就到了最核心的部分了,对数据库的增删改查。

三:数据库的增删改查。

1.使用 LitePal 添加数据。

使用 Book 类对象调用各成员变量的setter方法添加数据,最后再调用 save() 方法。

Book book = new Book();
book.setId(1);
book.setName("tan");
book.setPrice(10);
book.save();

2.使用 LitePal 更新数据。

Book book1 = new Book();
book1.setPrice(20);
book1.updateAll("name=?","math");

代码的执行的操作是,将所有 name = math 的书的价格更改为 20。其中 ?号是一个占位符,通过后面的参数来设置。

3.使用 LitePal 删除数据。

LitePal.deleteAll(Book.class,"name=?","English");

代码执行的操作是把所有 name = English 的书删除。

4.使用 LitePal 查询数据。

查询数据稍微复杂一点,但也不难。在SQL语言中查询也是最重要,最难的知识。LitePal中提供了如下方法供你任意组合,来达到你的查询目的。首先第一步你需要定义一个 List<Book> books 集合 用来存放查询的结果。

4.1.findAll() 方法,查询表中所欲数据。

List<Book> books = LitePal.findAll(Book.class);

4.2.findFirst() 方法和findLast()方法。查询第一条数据和最后一条数据。

//由于只有一条数据,所以不需要使用集合
Book firstBook = LitePal.findFirst(Book.class);
//同理查询最后一条数据
Book lastBook = LitePal.findLast(Book.class);

4.3.select() 方法,用于指定查询哪几列的数据。

List<Book> books = LitePal.select("id","name","price").find(Book.class);

4.4where() 方法,用于指定查询的约束条件。下面查询 price 大于 10 的数据。

List<Book> books = LitePal.where("price>?","10").find(Book.class);

4.5.order() 方法,用于指定对结果的排序方式。下面按 price 降序排序。

List<Book> books = LitePal.order("price desc").find(Book.class);

4.6.limit() 方法,用于指定查询结果的数量。下面查询只会显示前面3个数据。

List<Book> books = LitePal.limit(3).find(Book.class);

4.7offset() 方法,用于指定查询的偏移量。下面设置偏移量为2,即显示第三条数据和第三条数据以后的数据。

 List<Book> books = LitePal.offset(2).find(Book.class);

4.8.最后就是这些方法的任意组合了,使用也很方便。

List<Book> books1 = LitePal.select("id","name","price")
                           .where("price>?","5")
                           .order("price")
                           .limit(10)
                           .offset(2)
                           .find(Book.class);
                          

上面代码表示:查询 Book 表第3到第13条满足 price 大于 10 这个条件的 id ,name, price 这三列,并将这些数据按价格升序排序。

好吧,关于LitePal 的配置和对数据库的操作到这就结束了,LitePal操作数据库比文件存储和SharedPreferences存储要好,它适合存储较为复杂的数据。希望能帮助到大家。最后截一张图,有关 LitePal 内部 id 的问题。

发布了38 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43851639/article/details/89972840