2.使用LitePal开源库来操作数据库

介绍:

LitePal是一款开源的Android数据库框架,它采用了对象关系映射技术(ORM)的模式,并将我们平时开发最常用到的数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表和增删改查的操作.
LitePal 的项目主页上也有详细的使用文档,地址是:https://github.com/LitePalFramework/LitePal

技能1:使用LitePal:

  • 第一步:在Android studio中对开源库的引用就可以了
    在app/build.gradle文件中,对dependencies闭包中添加如下引用
dependencies {
    compile 'org.litepal.android:core:2.0.0'
}
  • 添加的这行声明中,前面部分是固定的,最后的2.0.0是版本号的意思,最新的版本号可以到LitePal的项目主页上去查看

这样我们就成功引入到当前项目中了

  • 第二步:配置litepal.xml文件.
    右击app/src/main目录 new->Directory创建一个assets目录,然后再assets目录下再创建一个litepal.xml文件,接着编辑litepal.xml文件中的内容,内容如下



   

   

   

   

  • 其中
    标签用于指定数据库名
    标签用于指定数据库版本号
    标签用于指定所有的映射模型
    标签用于声明我们要配置的映射模型类,注意一定要使用完整的类名(在Android studio 中对着类名右键,copy reference 复制完整的类名),不管有多少个模型类需要映射,都使用同样的方式配置在标签下
  • 最后一步:配置LitePalApplication,修改AndroidManifest.xml 中的代码,加入android:name="org.litepal.LitePalApplication

package="test.study.wzm.coolweather">

android:name="org.litepal.LitePalApplication"
android:allowBackup="true"
android:icon="@mipmap/logo"

通过以上的配置,已经可以让LitePal的所有功能都正常工作了

技能2:创建和升级数据库

  • 刚才在介绍的时候说过,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射?简单点来说,我们使用的编程语言是面向对象语言,而使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射.
    那么我们就可以通过面对对象的思维来操作数据库,而不用再和SQL语句打交道了.
  • 定义一个City类
import org.litepal.crud.DataSupport;

public class City extends DataSupport {


    private String cityName;//市名字
    private int cityCode;//市代号
    private int provinceId;//当前市所属于省的id值
   
    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public int getCityCode() {
        return cityCode;
    }

    public void setCityCode(int cityCode) {
        this.cityCode = cityCode;
    }

    public int getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(int provinceId) {
        this.provinceId = provinceId;
    }
}

  • 这是一个典型的java bean ,在City类中我们定义了各成员变量,并生成了setter getter方法. City类就会对应数据库中的City表,而类中的每一个成员变量分别对应了表中的每一列,这就是对象关系映射最直观的体验.
  • 仅有这样还不行,我们要在litepal.xml中添加City类到映射中去,在list标签中加入
    

    

    
  • 这样就已经把所有工作都完成了,在需要创建数据库和表的逻辑里执行代码
    LitePal.getDatabase();
  • 就将数据库和表都创建完成了.

升级数据库中的表

  • 修改你想改的任何内容,然后将litepal.xml中的版本号加1即可
    比如我们想在city表中添加一个id列,直接修改City类中的代码,加入成员变量id,并添加setter和getter方法
    private int id;
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

  • 重新运行创建数据库逻辑即可升级数据库成功

添加数据

  • 所有的数据库表都要继承DataSupport类才能进行增删查改
    1,创建出模型类的实例
    2,将所有要存储的数据设置好
    3,最后调用一下save方法保存.
City city = new City();
city.setId(001);
city.setCityName("广州");
city.setCityCode(9527);
city.save();

更新数据

  • 1.new出实例
    2.直接调用setter方法设置要更新的数据
    3.最后调用updateAll方法执行更新操作.
  • 注意: updateAll方法中可以指定一个条件约束,和SQL中where参数有点类似,但是更加简洁,如果不指定条件语句的话,表示更新所有数据.
City city = new City();
city.setId(002);
city.updateAll("cityName = ? and cityCode = ?","广州","9527");

将符合条件是广州和9527的数据进行更新为id = 2;

将字段值设置为默认值时,只能调用setToDefault()方法,接收一个参数,传入相应的列名

City city = new City();
city.setToDefault("provinceId");
city.updateAll();

这段代码将所有的provinceId都更新为0,因为updateAll()方法中没有指定约束条件,所以更新操作对所有数据都生效.

删除数据

DataSupport.deleteAll(city.class,"cityCode < ?","9526");

deleteAll()方法第一个参数用于指定删除哪张表中的数据,
第二个参数用于指定约束条件,删除city表中cityCode低于9526的城市.
如果不指定约束条件,则删除表中所有的数据.

查询数据

  • 调用DataSupport.findAll()方法,返回一个List集合,接收一个参数,指定查询哪个表.
List cities = DataSupport.findAll(City.class);
for( City city: cities){
    log.d("MainActivity","city name is "+ city.getCityName());
}

  • 除了findAll方法外,LitePal还提供了很多其他非常有用的api,比如我们想查City表中的第一条数据就可以这样写:
    City firstCity = DataSupport.findFirst(city.class);

  • 查 City表中的最后一条数据可以这样写:
    City lastCity = DataSupport.findLast(city.class);

  • 还可以通过连缀查询来定制更多的查询功能:

  • select()方法用于指定查询哪几列的数据,对应了SQL当中的select关键字,比如只查cityName和id
    List cities = DataSupport.select("cityName","id").find(city.class);

  • where()方法用于指定查询的约束条件,对应SQL当中的where关键字.比如只查cityCode大于9526的数据,
    List cities = DataSupport.where("cityCode > ?","9526").find(city.class);

  • order()方法用于指定结果的排序方式,对应SQL当中的order by 关键字.比如将查询结果按照id从高到低排序,可以这样写:
    List cities = DataSupport.order("id desc").find(city.class);
    其中desc表示降序排列,asc或者不写表示升序排列

  • limit()方法用于指定查询结果数量,比如只查表中的前3条数据
    List cities = DataSupport.limit(3).find(city.class);

  • offset()方法用于指定查询结果的偏移量,比如查询表中的第2,3,4条数据
    List cities = DataSupport.limit(3).offset(1).find(city.class);

  • 当然可以对这5个方法进行任意的连缀组合,完成一个比较复杂的查询操作

List cities =  DataSupport.select("cityName","id")
.where("cityCode > ?","9526")
.order("id")
.limit(10)
.offset(10)
.find(city.class);

查询city表中,第11~20条满足cityCode大于9526这个条件的cityName和id这两列数据,并将查询结果按照页面升序排列.

Litepal的查询还支持原生SQL来进行查询:

Cursor c = DataSupport.findBySQL("select * from City where cityCode > ? and id < ?","9526","20")

你可能感兴趣的:(2.使用LitePal开源库来操作数据库)