Android 数据持久化之LitePal
LitePal是一个开源数据库,GitHub路径为:https://github.com/LitePalFramework/LitePal,上面有详细信息。它采用了ORM的模式,把我们一些常用的数据库操作进行了封装,使得不用编写一行SQL语句就能进行相关的增删改查。
一、在AS项目中,集成LitePal使用环境,创建数据库
1.在build.gradle文件中:
dependencies {
implementation 'org.litepal.android:java:3.0.0'
}
2.在app/src/main路径下新建assets目录,并在该目录下新建 litepal.xml文件
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--数据库名-->
<dbname value="testlitepal"></dbname>
<!--数据库版本-->
<version value="1"></version>
<!--指定所有的映射模型-->
<list>
<!--此处指定人物类模型,Person为最简单的javabean-->
<mapping class="com.xie.com.testfragment.domain.Person"></mapping>
</list>
</litepal>
Person类的JavaBean如下:
public class Person {
private String name;
private int age;
private String sex;
private float point;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public float getPoint() {
return point;
}
public void setPoint(float point) {
this.point = point;
}
}
3.在AndroidManifest.xml中配置LitePalApplication
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
4.执行操作,testlitepal数据库就能被成功执行,且此时里面会包含一张person的表
Connector.getDatabase();
二、升级数据库
LitePal升级数据库很简单,只需修改版本号即可。如现在我想在Person表中增加一列地址address并且新增一张新表Student.
1.直接在Person实体类中添加address属性
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
2.新建实体类Student
public class Student {
private String name;
private int age;
private String sex;
private float point;
private String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public float getPoint() {
return point;
}
public void setPoint(float point) {
this.point = point;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
3.最后在LitePal.xml中添加mapping对象映射,重新调用Connector.getDatabase();即可
<mapping class="com.xie.com.testfragment.domain.Student"></mapping>
三、向表中添加数据
1.修改Student,使之继承LitePalSupport
public class Student extends LitePalSupport {
...
}
2.数据添加操作,只需要新建Student对象,给对象赋值完成后,直接调用save方法即可
//LitePal数据添加
Student student = new Student();
student.setName("张三");
student.setSex("男");
student.setAge(15);
student.setPoint(89);
student.setAddress("重庆");
student.save();
四、更新表中的数据
1.执行更新操作的方法是updateAll,此方法可带条件,不带则是全部更新。
Student student = new Student();
student.setAge(18);
student.setAddress("北京");
student.updateAll("name=?","张三");
2.注意:在使用updateAll方法时,如果我们要把一个字段更新成默认值时,是不能用上面的set方法来设置的。int类型的默认值是0,boolean类型的默认值false,String类型的默认值是null。如当我们要把年龄age字段设为默认值,直接student.setAge(0)是无效的。要想把字段值设为默认值,需要用setToDefault方法。下面执行的语句代表把姓名为张三的年龄age字段的值设为默认值0.且地址address设置为北京。
Student student = new Student();
student.setToDefault("age");
student.setAddress("北京");
student.updateAll("name=?","张三");
五、删除表中的数据
删除表中数据时,deleteAll中写条件。
LitePal.deleteAll(Student.class,"age > ?","15");
六、查询表的数据
1.查询表中的数据
//查询student表中的所有数据
List<Student> studentList = LitePal.findAll(Student.class);
//查询表中的第一条数据
Student student1 = LitePal.findFirst(Student.class);
//查询表中的最后一条数据
Student student2 = LitePal.findLast(Student.class);
2.查询表中年龄大于15的学生
//查询表中年龄大于15的学生
List<Student> studentList1 = LitePal.where("age > ?","15").find(Student.class);
ps:
1.若是你的LitePal版本较低,实体类继承的时候应该继承DataSupport而不是LitePalSupport,而进行删除查询的时候,也应该是DataSupport,而不是LitePal。
2.更多增删改查的操作语句请参考LitePal文档:https://github.com/LitePalFramework/LitePal