当前位置: 首页 > 工具软件 > LBase-Android > 使用案例 >

Android--LitePal数据库的使用

秦钟展
2023-12-01

数据库存储之LitePal

LitePal是一款开源的Android数据库框架,其采用了对象关系映射(ORM)的模式,并将平时开发最常用的一些数据库功能进行了封装,使得不用编写一行SQL语句也可以完成各种建表和CRUD操作。
Github地址:https://github.com/LitePalFramework/LitePal
一.配置数据库
编辑build.gradle文件,在dependecies闭包中添加一下内容,其中的3.0.0为LitePal的版本,最新版本上LitePal的github上查看。

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

配置litepal.xml文件。在app/src/main/assets目录下(若assets目录不存在,则创建),创建litepal.xml文件,编辑该文件如下。

<litepal>
    <dbname value="BookStore" ></dbname>

    <version value="1"></version>

    <list>
    </list>

</litepal>

< dbname > 标签用于指定数据库名,< version >标签用于指定数据库版本号,
< list >标签用于指定所有的映射模型

最后需要配置一下AndroidManifest.xml,配置application为org.litepal.LitePalApplication,这样才能让LitePal的所有功能都可以正常工作。

<application
        android:name="org.litepal.LitePalApplication"
        ...
</application>

二.创建和升级数据库
LitePal采取的是对象关系映射(ORM)的模式,简单的来说,我们使用的编程语言是面向对象语言,使用的数据库则是关系型数据库,那么将面向对象的语言与面向关系的数据库之间建立一种映射关系,就是对象关系映射。

定义一个Book类如下,其中定义了id、author、price以及name变量,并生成对应的getter和setter方法。

public class Book extends LitePalSupport {//进行CRUD时需要继承LitePalSupport类

    private int id;
    private String author;
    private double price;
    private String name;
	
	//getters and setters
}

Book类即对应数据库中Book数据表,而类中的每个字段对应表中的每一列。

将Book类添加到映射模型列表当中,修改litepal.xml如下。

<list>
    <mapping class="com.example.holidaytest.Book"></mapping>
</list>

调用LitePal的getDatabase()方法,数据库在不存在的情况下会被自动创建。

LitePal.getDatabase();//创建数据库

不同于SQLite的升级方式,LitePal对数据库的升级,只需要将litepal.xml中的version标签中的value即版本号进行叠加,LitePal会自动升级。
而值得注意的是,SQLite中通过onUpgrade()方法的升级会删除原本数据库中的所有数据,而LitePal保留之前表中的所有数据,从而避免了数据丢失的问题。

三.添加数据
使用LitePal添加数据,只需要创建模型类的实例,再将所有存储的数据设置好,调用**save()**方法即可插入数据,例子如下:

	Book book = new Book();
	book.setName("The Three Country");
	book.setAuthor("ljh");
	book.setPrice(888);
	book.save();

四.更新数据
LitePalSupport提供了updateAll() 方法用于更新。更新例子如下

	Book book = new Book();
	book.setPrice(555);
	book.setAuthor("Tom");
	book.updateAll("name = ? and price > ?", "The Three Country", "666");

updateAll()方法可以指定一个条件约束,与SQLite中的update()方法的where参数部分有点类似,但更为简洁,如果不指定条件语句的话,就表示更新所有数据

当需要把某个字段设置成默认值时,不可以使用set方式来设置数据,LitePal统一提供了一个setToDefault() 方法,传入相应的列名即可实现设置默认值。

	Book book = new Book();
	book.setToDefault("price");
	book.updateAll();//更新全部数据的price

五.删除数据

使用LitePal提供的deleteAll() 方法。

LitePal.deleteAll(Book.class, "price > ?", "666");

deleteAll()方法第一个参数用于指定删除数据对应的表,其后的参数表示约束条件。另外,如果不指定条件,deleteAll()则会删除表中的所有数据。

六.查询数据
同样是查询数据,相比于SQLite的query()方法冗长的参数,LitePal提供了findAll()方法更为简洁,并且其返回的是List对象,方便操作,例子如下。

	List<Book> books = LitePal.findAll(Book.class);
	for (Book book1 : books) {
	    //operation
	}

除了findAll()方法之外,LitePal还提供了其他的查询API,例如findFirst() 方法可用于查询第一条数据;findLast() 方法可用于查询最后一条数据。

而对于有条件的查询,LitePal提供了一系列的查询方法供使用:
 select()方法用于指定查询哪几列的数据
 where()方法用于指定查询的条件
 order()方法用于指定结果的排序方式
 limit()方法用于指定查询结果的数量
 offset()方法用于指定查询结果的偏移量
通过使用以上方法,进行任意的连缀组合即可完成比较复杂的查询操作。

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

另外,如果上述API满足不了需求,LitePal还支持原生的SQL进行查询,如下所示。

Cursor cursor = LitePal.findBySQL("select * from Book where price", "400", "20");

最后将Cursor中的数据一一取出。

 类似资料: