0%

Android开发 | 使用LitePal操作数据库

Andorid开发 | 使用LitePal操作数据库

总结于 郭霖大神 《第一行代码》中LitePal章节

LitePal是什么?

LitePal 是一个开源的Android数据库框架,采用对象关系映射(ORM)的模式,并将常用的数据库操作(CRUD)进行封装。

那么ORM又是什么?我们的编程语言是面向对象编程语言,使用的数据库是关系型数据库。那么将面向对象语言与面向关系的数据库之间建立一种映射关系,这就是对象关系映射


使用前配置

  1. 添加LitePal依赖 在 build.gradle中 添加

    1
    implementation 'org.litepal.android:core:1.3.2'
  2. 创建assets目录,将工程目录切换到 Project下,app-src-main-右击 新建一个assets目录,在assets目录下 新建一个litepal.xml文件 编辑litepal.xml中的内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <litepal>
    <!-- 数据库名-->
    <dbname value="Bookstore"></dbname>
    <!-- 数据库版本号-->
    <version value="2"></version>
    <!-- 表对应的表名-->
    <list>
    <mapping class="com.littlestone.litepalpractice.Book"></mapping>
    <mapping class="com.littlestone.litepalpractice.Category"></mapping>
    </list>
    </litepal>
  3. 修改项目的Application,(定死的,一定要这么写)

    1
    android:name="org.litepal.LitePalApplication"

创建数据库

  1. 定义一个Book类,采用Java Bean 表述,(这里继承自DataSupport,是为了在增加数据的时候使用的,如果只是创建数据库,可以不用继承)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    public class Book extends DataSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;//书名
    private String press;//出版商

    public Book() {
    }

    public Book(int id, String author, double price, int pages, String name, String press) {
    this.id = id;
    this.author = author;
    this.price = price;
    this.pages = pages;
    this.name = name;
    this.press = press;
    }

    public int getId() {
    return id;
    }

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

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

    public String getName() {
    return name;
    }

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

    public String getPress() {
    return press;
    }

    public void setPress(String press) {
    this.press = press;
    }
  2. 将类名(完整的包名)加入到litepal中的list 中

    1
    2
    3
    <list>
    <mapping class="com.littlestone.litepalpractice.Book"></mapping>
    </list>
  3. 在MainActivity中,调用Connector.getDataBase()

    1
    Connector.getDatabase();

  1. 创建一个Book类对象

  2. 将Book类继承自DataSupport

    同上

  3. 调用对象.save(),.save是DataSupport的

  4. 全部代码

    1
    2
    3
    4
    5
    6
    7
    Book book = new Book();
    book.setName("第一行代码");
    book.setAuthor("白文磊");
    book.setPages(454);
    book.setPrice(16.96);
    book.setPress("Unknow");
    book.save();

  1. 调用DataSupport,deleteAll (第一个参数:类名.class,第二个参数 where语句,第三个参数 第二个参数中占位符?对应的值)

    1
    DataSupport.deleteAll(Book.class, "price<?", "20");

  1. 创建要修改后的数据 对象

  2. 调用对象.updateAll(第一个参数:where,第二个参数where中?占位符对应的)

  3. 全部代码

    1
    2
    3
    4
    Book book = new Book();
    book.setPrice(100);
    book.setPress("西北大学");
    book.updateAll("name=? and author=?", "第一行代码", "白文磊");

查找的API较多,返回的是List<>类型,就可以进行遍历了

  1. DataSupport.findAll(Book.class)

  2. DataSupport.findFirst(Book.class)

  3. DataSupport.findLast(Book.class)

  4. DataSupport.select(“列名”).find(Book.class)

    1
    DataSupport.select("name","author").find(Book.class);
  5. DataSupport.where(第一个参数:”pages>?”,占位符对应的值)

    1
    DataSupport.where("pages>?","100").find(Book.class);
  6. DataSupport.limit ().find() 查找前几行的数据