Litepal框架使用对SQLite数据库操作
Posted Android记事苟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Litepal框架使用对SQLite数据库操作相关的知识,希望对你有一定的参考价值。
文章目录
一、LitePal是什么?
LitePal是一款开源的android数据库框架,采用了对象关系映射(ORM)的模式,将平时开发时最常用的一些数据库功能进行了封装,使得开发者不用编写一行SQL语句就可以完成各种建表、増删改查的操作。
二、使用步骤
1.添加依赖
在app/build.gradle文件中dependencies 中添加:
dependencies {
implementation 'org.litepal.guolindev:core:3.2.3'
}
2.创建assets目录
AS左上角File->New->Folder->Assets Folder,创建好如下:
在assets目录下创建litepal.xml配置文件,名字不要错要不然找不到配置文件,配置文件里配置如下。
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义应用程序的数据库名称。默认情况下,每个数据库名称应以.db结束。如果你没有名字数据库以.db结束, LitePal将为您自动加上后缀。例如:
-->
<dbname value="demo" />
<!--
定义数据库的版本。每一次当你想要数据库升级时,如表中添加字段了增加表了。
修改模型中定义的映射标签“version”,就使版本值+ 1,数据库的升级将自动处理而不会出现问题。
-->
<version value="1" />
<!--在映射标签列表中定义您的模型,LitePal将会为每个映射类创建表。支持类中字段被映射到列。-->
<list>
<mapping class="com.example.mylitepal.model.Song" />
</list>
<!--
定义.db文件的位置。
“internal”表示.db文件将存储在内部存储的数据库文件夹中,无人可以访问。
“external”表示.db文件将存储在主外部存储设备上目录的路径中,每个人都可以访问的永久文件。
默认值为“内部 internal”。-->
<storage value =“external”/>
</litepal>
3.LitePal初始化
第一种是直接在manifest.xml文件中设置application的name属性:
//添加 android:name="org.litepal.LitePalApplication"
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
第二种是如果自己创建了Application那么在里面初始化:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LitePal.initialize(this);
}
...
}
<manifest>
<application
android:name="com.example.MyApplication"
...
>
...
</application>
</manifest>
三、使用方法
1.创建表 Song
创建一个Song类extends LitePalSupport 方法如下:
public class Song extends LitePalSupport {
//name是唯一的,且默认值为unknown
@Column(unique = true, defaultValue = "unknown")
private String name;
//nullable不为空
@Column(nullable=false)
private int duration;
private String size;
//ignore忽略即是不在数据库中创建该属性对应的字段
@Column(ignore = true)
private float price;
//添加所有字段的getter和setter方法
public String getName() { return name;}
public int getDuration() { return duration;}
public String getSize() { return size; }
public float getPrice() { return price; }
public void setName(String name) { this.name = name;}
public void setDuration(int duration) { this.duration = duration;}
public void setSize(String size) { this.size = size; }
public void setPrice(float price) { this.price = price; }
}
在litepal.xml文件中设置Song表映射:
<list>
<mapping class="com.example.mylitepal.model.Song" />
</list>
2.添加数据
//将一条记录存储进数据库中
Song song = new Song();
song.setName("girl");
song.setDuration(50);
song.setSize("20M");
song.save()
3.删除数据
// 删除单个记录,id=1
LitePal.delete(Song .class,1);
//删除数据库中Song 表的所有记录
LitePal.deleteAll(Song .class);
//删除数据库Song 表中duration大于35的记录
LitePal.deleteAll(Song .class, "duration > ?" , "35");
4.修改数据
//方法一
//第一步,先查找id为1的记录
Song song = LitePal.find(Song .class, 1);
//第二步,改变某个字段的值
song .setDuration(35);
//第三步,保存数据
song .save();
//方法二
Song song = new Song();
song.setDirector("35");
//直接更新id为1的记录
song.update(1);
//方法三
Song song = new Song();
//更新内容
song.setDuration(35);
song.setSize("100M");
//更新所有满足的判读条件
song.updateAll("duration=? and size=?","50","20M");
5.查询数据
// 通过id查询某一条数据
Song song = LitePal.find(Song.class, id);
//查表中第一条数据
Song song = LitePal.findFirst(Song.class);
//查表中最后一条数据
Song song = LitePal.findLast(Song.class);
//条件查询
List<Song> song = LitePal.select("duration") //查询指定一列数据展示,不写则默认所有列都查出
.where("duration= ?", "50")//where 查询条件
.order("duration desc") //指定查询出的结果按照哪一列进行排序,asc表示正序排序默认,desc表示倒序排序
.limit(5)//limit()方法接收一个整型参数,用于指定查询前几条数据
.offset(10)//表示偏移十个位置,那么原来是查询前5条数据,偏移了十个位置之后,就变成了查询第10到第15条数据了
.find(Movie.class);
6.异步查询和保存
// 异步查询 在onFinish回调
LitePal.findAllAsync(Song.class).listen(new FindMultiCallback<Song>() {
@Override
public void onFinish(List<Song> allSongs) {
}
});
// 异步保存
Song song= new Song();
song.setName("XXXX");
song.setDuration(35);
song.setCover(getCoverImageBytes());
song.saveAsync().listen(new SaveCallback() {
@Override
public void onFinish(boolean success) {
}
});
总结
链接: Github开源框架地址.
链接: Litepal使用demo.
以上是关于Litepal框架使用对SQLite数据库操作的主要内容,如果未能解决你的问题,请参考以下文章