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 ORM -- Litepal

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

Android数据库框架LitePal的使用

SQlite数据库框架:LitePal