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数据库操作的主要内容,如果未能解决你的问题,请参考以下文章

Litepal框架使用对SQLite数据库操作

Litepal框架使用对SQLite数据库操作

Android数据库框架LitePal的使用

Android ORM -- Litepal

Litepal 数据库操作框架的使用 (火)

SQlite数据库框架:LitePal