LitePal的基本用法

本文LitePal的使用方法来自郭霖的第一行代码。
博客地址 : http://blog.csdn.net/guolin_blog/article/details/38461239

传统的数据库操作都是通的SOL语句进行的,使用起来也不是很方便,今天我们就介绍一下LitePal框架
LitePal采取的是对象关系映射(ORM)的模式,将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。

配置Litepal
compile 'org.litepal.android:core:1.4.1'
  • 配置litepal.xml 文件
    在assets目录下新建一个litepal.xml 文件,编辑文件内容如下:
<litepal>
    <dbname value="studentData"></dbname>
    <version value="1"/>

    <list>
    </list>
</litepal>

dbname 标签用于指定数据库的名称,version 指定数据库的版本,list 用于指定所有的映射模型,后续我们建表示就会用到

  • 配置LitePalApplication
    修改AndroidManifest.xml文件:
<application
        android:name="org.litepal.LitePalApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        ......

这样LitePal就配置完成了,下面我们就可以开始使用了


创建和升级数据库
  • 创建数据库
    我们这里建立一张学生信息表(是不是有种熟悉的味道),这里我们定义一个student类:
public class Student {
    //每一个字段对应的表中的每一列,
    //Student类就对应着数据库中的student表
    private int id;
    private String student_number;
    private String name;
    private int age;
    private String sex;


    public int getId() {
        return id;
    }

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

    public String getStudent_number() {
        return student_number;
    }

    public void setStudent_number(String student_number) {
        this.student_number = student_number;
    }

    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;
    }
}

在litepal.xml中添加映射关系:

     <list>
        <mapping class = "com.example.litepal_demo.Student"/>
    </list>

现在我们只要进行任意一次的数据库操作,定义的数据库studentData.db 就会自动的创建:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        LitePal.getDatabase();
    }

LitePal.getDatabase()方法就是一次简单的数据库操作,执行之后数据库就会自动创建,到这里我们的数据库创建就实现了,是不是很简单。

  • 数据库的升级

    使用litePal升级数据也非常简单,我们不应担心升级数据库时,数据丢失的问题,只需要修改版本号即可,比如我们新加一个表,显示学生的成绩:

public class StudentScore {
    private int id;
    private String student_number;
    private float score_Chinese;
    private float score_English;
    private float score_Math;

    public int getId() {
        return id;
    }

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

    public String getStudent_number() {
        return student_number;
    }

    public void setStudent_number(String student_number) {
        this.student_number = student_number;
    }

    public float getScore_Chinese() {
        return score_Chinese;
    }

    public void setScore_Chinese(float score_Chinese) {
        this.score_Chinese = score_Chinese;
    }

    public float getScore_English() {
        return score_English;
    }

    public void setScore_English(float score_English) {
        this.score_English = score_English;
    }

    public float getScore_Math() {
        return score_Math;
    }

    public void setScore_Math(float score_Math) {
        this.score_Math = score_Math;
    }


}

修改配置文件litepal.xml

<version value="2"/>

    <list>
        <mapping class = "com.example.litepal_demo.Student"/>
        <mapping class = "com.example.litepal_demo.StudentScore"/>
    </list>

重新执行代码,我们就可以发现我们的数据库新建了一个表。


接下来就是我们的CRUD了,这个是我们对数据库使用比较频繁的方法了
LitePal对数据库进行CRUD需要继承自 DataSupport类才行,我们对Student和StudentScore进行简单修改,继承DataSupport类,然后向表中添加数据:

  • 添加数据
    private void addData(){
        Student student = new Student();
        student.setName("张三");
        student.setAge(19);
        student.setSex("男");
        student.setStudent_number("17000001");
        student.save();
    }

在存储数据是我们用到了student.save()方法来向数据库中存储数据。

  • 更新数据
    //更新数据
    private void updateData() {
        Student student = new Student();
        student.setName("李四");
        student.setAge(19);
        student.setSex("男");
        student.setStudent_number("17000002");
        student.save();
        //我们先添加了一条数据,在此给对象赋值后调用save方法,
        //此时litepal会发现student对象已存储,因此不会添加一条新数据,而会更新当前的数据
        student.setAge(20);
        student.save();
    }

通过判断条件,对数据进行更新:

    //更新数据
    private void updateDataByCondition() {
        Student student = new Student();
        student.setAge(21);
        //更新名字为李四,且性别为男 学生的信息
        student.updateAll("name = ? and sex = ?","李四","男");
    }

方法中我们先从新设置数据,然后调用updateAll()方法执行更新操作,和SOL中的update()方法类似
updateAll() 方法中可以指定一个添加约束,若不指定,就表示更新所有数据。

注意:当我们想把某一字段更新成默认值时,是不可以用set的方式来更新数据的,Java中任何一个数据类型的字段都会有默认值,如 int 类型的默认值为 0 ,boolean 类型的默认值为 false,对数据想要更新为默认值时,litePal提供了一个 setToDefault() 方法,然后传入相应的列名就可以了

如下:

Student student = new Student();
student.setToDefault("sex");
student.updateAll();
  • 删除数据
   //删除数据
    private void deleteData() {
        //删除Student表中年龄小于18的学生信息
        DataSupport.deleteAll(Student.class,"age < ?","18");
    }

代码非常好理解,第一个是制定你要删除的表,后面是删除条件。不指定条件就表示删除所有数据。

  • 查询数据
    litePal对查询数据做了一些优化,代码十分的简洁,易懂。litepal查询数据返回的是一个对象类型的List的集合,而不是Cursor对象,这样我们在取值的时候就更加的方便

    • 查询所有数据
    private void queryAllData() {
        //查询所有数据
        List<Student> list = DataSupport.findAll(Student.class);
        for (Student student:list){
            Log.i("TAG","name="+student.getName());
            Log.i("TAG","age="+student.getAge());
            Log.i("TAG","Sex="+student.getSex());
            Log.i("TAG","StudentNumber="+student.getStudent_number());
        }
    }
  • 查询第一条数据
Student student = DataSupport.findFirst(Student.class);
  • 查询最后一调数据
Student student1 = DataSupport.findLast(Student.class);
  • 运用连缀查询来制定更多的查询功能
 //select()  查询制定的列
        List<Student> list01 = DataSupport.select("name","age").find(Student.class);
        //where() 根据约束条件查询
        List<Student> list02 = DataSupport.where("age > ?","20").find(Student.class);
        //order() 对查询的结果进行排序 desc 表示降序排列 asc或者不写表示升序排列
        List<Student> list03 = DataSupport.order("student_number desc").find(Student.class);
        //limit() 指定查询结果的数量
        List<Student> list04 = DataSupport.limit(3).find(Student.class);
        //offset() 制定查询结果的偏移量 比如查询地2,3 条数据
        List<Student> list05 = DataSupport.offset(1).limit(2).find(Student.class);
        //以上的所有方法可以任意搭配组合,来完成复杂的查询操作
        List<Student> list06 = DataSupport.select("name","age","student_number")
        .where("age >?","20")
        .order("student_number")
        .limit(5)
        .find(Student.class);

以上就是LitePal查询的一些基础方法了,是不是代码更加的简洁明了。
当然如果上面的方法无法满足的你的需求,litePal也是支持使用原生的SQL来进行查询的:

 Cursor cursor = DataSupport.findBySQL("select * from Student where page > ? ","20");

DataSupport.findBySQL()方法放回的是一个Cursor 对象,我们需要用原生的方法解析数据。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值