Android SQLite数据库操作之LitePal

LitePal是一款开源的Android数据库框架,其采用了对象关系映射(ORM)模式,对平常开发常用到的一些数据库功能进行封装,使得可以不用编写一条SQL语句就可以完成各种建表和增删改查操作。

关于ORM的理解:我们使用的编程语言是面向对象语言,使用的数据库是关系型数据库。将面向对象的语言和关系型数据库之间建立一种映射关系,这就是对象关系映射!


PS:本文配置只写出需要配置的内容,关于其他与配置无关的内容先删除了,避免杂乱,方便阅读。


要使用LitePal需要先配置:

①添加依赖:打开文件   build.gradle(Module:app)   >

dependencies {
    compile 'org.litepal.android:core:1.4.1'
}

②新建文件夹: app > src > main右键 > New > Directory > assets


③新建XML文件:assets右键 > New > File > litepal.xml


④编辑XML文件:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"/>  //数据库名
    <version value="1"/>  //数据库版本
    <list>  //映射模型(用于映射表)
        
    </list>
</litepal>


⑤编辑  AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest >
    <application
        android:name="org.litepal.LitePalApplication" >
    </application>
</manifest>


至此,配置全部完成,LitePal所有功能可以正常工作。


————————————————————————————————————————————

操作数据库


1.创建一个JavaBean(万能类~~~或者说是模型类

package com.example.mjon.myapplication;

public class Book {

    private int id;
    private String name;
    private String author;
    private double price;
    private int pages;

    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getPages() {
        return pages;
    }

    public void setPages(int pages) {
        this.pages = pages;
    }

}

以上内容非常好理解:类名  即  表名  ;  字段名  即  列名  ;    ← 体现关系映射


2.将 JavaBean 添加到映射模型中 :

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"/>  //数据库名
    <version value="1"/>  //数据库版本
    <list>  //映射模型
        <mapping class="com.example.mjon.myapplication.Book"/>
    </list>
</litepal>

映射完成,只要进行任意一次数据库操作,数据库就会被创建出来。


3.数据库操作:


①创建数据库、数据表:

    LitePal.getDatabase();

    根据实际需求,可以放在Activity中的onCreate()方法中,让数据库和表在程序启动时就被创建出来


②修改表、添加表:

    修改表:直接修改表所对应 JavaBean 中的字段名 ,然后把映射配置中的版本号+1即可;

    添加表:创建 JavaBean,添加字段名、Get和Set, 然后将完整类名添加到映射模型当中,同样地,把映射配置中的版本号+1即可;


PS:修改表、添加表相较SQLiteDatabases操作方式是不是特别简单~而且,最重要的是表中的数据不会丢失~~SQLiteDatabases方式的话~厄,要写一大堆逻辑。


使用LitePal进行CRUD操作时,模型类需要继承结构 extends DataSupport;

继承的作用就是调用 DataSupport 中封装的一些方法,才能对数据库进行操作;

【CRUD:创建、查询、更新、删除~】


③添加数据:

先创建模型类的实例化对象,然后调用类中set方法插入数据,再使用sava()方法保存~

Book book = new Book();  //实例化对象
book.setName("数据结构");
book.setAuthor("哥白尼");
book.setPrice(43.20);
book.setPages(420);
book.setPress("人民邮电出版社");
book.save();  //保存


④更新数据:

Ⅰ、更新自定义值

    先创建模型类的实例化对象,然后调用类中set方法更新数据,再使用updateAll()方法执行更新;

    updateAll()中第一个字符串参数为约束条件,第二个参数为约束条件的具体值;

Book book = new Book();
book.setPress("清华大学出版社");
book.setAuthor("牛顿");
book.updateAll("name = ? and pages = ?", "数据结构", "420");  //第一个""内容为列名 = ?   第二个""内容为列名对应的值


Ⅱ、更新默认值(不可直接使用set方式)

    int的默认值是0,String的默认值是null,boolean的默认值是false,所以,当你想直接设置一个列的值为0的时候,使用set是不起作用的,而是要使用setToDefault(),其参数为列名;

Book book = new Book();
book.setToDefault("pages");
book.updateAll("author = ?", "哥白尼");


⑤删除数据:

    非常好理解,第一个参数为JavaBean,第二个参数为约束条件,第三个参数为约束条件的具体值;

DataSupport.deleteAll(Book.class, "author = ?", "牛顿");

⑥查询数据(重点!!!因为其提供的API很多):

Ⅰ、查询所有数据

    取出所有数据只要第一行就够了,它会返回一个已保存的List对象;for之后的内容是取出数据而已;

List<Book> list = DataSupport.findAll(Book.class);
for (Book book : list) {
    sb.append(book.getId() +
            "_" + book.getName() +
            "_" + book.getAuthor() +
            "_" + book.getPrice() +
            "_" + book.getPages() +
            "_" + book.getPress());
}


Ⅱ、查询第一条数据或最后一条数据(参数直接传入JavaBean就行了)

Book first = DataSupport.findFirst(Book.class);
Book last = DataSupport.findLast(Book.class);


Ⅲ、查询指定列的数据

    select() 传入的参数是列名,传多少个看你具体需求; find()传入JavaBean,对应指哪一张表;

List<Book> books = DataSupport.select("author","press").find(Book.class);


Ⅳ、查询约束条件的数据

    where() 传入的第一个参数是约束条件,之后的参数是约束条件的具体值;  find()不再赘述~

List<Book> books = DataSupport.where("pages > ?", "400").find(Book.class);

Ⅴ、查询数据的排序方式

    order() 传入的参数为字符串,字段名  空格  排序方式(asc 或者desc);  find()不再赘述~

List<Book> books = DataSupport.order("id desc").find(Book.class);

Ⅵ、查询结果数量

    limit() 传入的参数只有一个int,就是前多少条数据;  find()不再赘述~

List<Book> books = DataSupport.limit(3).find(Book.class);


Ⅶ、查询结果偏移量(2、3、4)

    limit()同上~~offset()也是传入int,指从第几条数据开始;  find()不再赘述~

List<Book> books = DataSupport.limit(3).offset(1).find(Book.class);


Ⅷ、综合使用

    根据实际需求使用不同的约束方法去查询数据,不再赘述~

List<Book> list  = DataSupport.select("author", "press")
                              .where("pages > ?", "400")
                              .order("press desc")
                              .limit(6)
                              .offset(2)
                              .find(Book.class);

Ⅸ、如果以上查询API都无法满足你的需求,那么LitePal还支持原生态的SQL语句

Cursor cursor = DataSupport.findBySQL("select * from Book where pages > ? and author = ?", "400", "牛顿");
if(cursor.moveToFirst()){
    do{
        String name = cursor.getString(cursor.getColumnIndex("name"));
        String author = cursor.getString(cursor.getColumnIndex("author"));
        double price = cursor.getDouble(cursor.getColumnIndex("price"));
        int pages = cursor.getInt(cursor.getColumnIndex("pages"));
        String press = cursor.getString(cursor.getColumnIndex("press"));
    }while(cursor.moveToNext());
}

总的来说~LitePal操作数据库的方式简直不要太简便了~因为它提供了很多API,所以我们可以非常简单的对数据库进行基本操作。

附上LitePal:LitePal:GitHub

猜你喜欢

转载自blog.csdn.net/march0000/article/details/80302129