使用LitePal操作SQLite数据库(增删查改) - Go语言中文社区

使用LitePal操作SQLite数据库(增删查改)


    二话不说,先吹一波LitePal。LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)模式,并将我们平时开发常用的一些数据库功能进行封装,使得不用编写一行SQL语句就可以 完成各种建表和增删查改操作。我们使用的编译语言是面向对象语言,使用的数据库则是关系数据库,那么面向对象的语言和面向关系的数据库之间建立一种映射关系,它使得我们用面向对象的思维来操作数据库,不用和SQL语句打交道。操作简单就够了吗?不仅如此,SQLiteDatabace操作数据库,进行版本更新的时候,会清除掉旧数据,但是LitePal会保留旧数据,这样就不用担心数据的丢失。

一.配置LitePal

    由于LitePal是一个开源库,所以想要使用LitePal,第一步是在app/build.gradle文件中声明该开源库的引用。在app/build.gradle文件中的dependencies闭包中添加如下内容,其中1.3.2是版本号:

implementation 'org.litepal.android:core:1.3.2'

    接下来需要配置litepal.xml文件。右击app/src/main目录->New->Directory,创建一个assets目录,在后再该目录下新建一个litepal.xml文件,并编辑内容如下,其中<dbname>标签用于指定数据库名,<version>标签用于指定数据库的版本号,<list>标签用于指定所有的映射模型:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore" ></dbname>

    <version value="1" ></version>

    <list>
    </list>
</litepal>

    最后还要配置LitePalApplication,修改AndroidManifest.xml中的代码,在<application>标签中加入android:name="org.litepal.LitePalApplication"属性即可。如下:

至此,配置完毕。

    在进入正式操作之前,我们需要了解我们在Android studio中无法查看创建的数据库表格,所以需要adb shell来对数据库和表的操作情况进行检查,保证操作成功。如何操作请点击“adb”。

二.设置类与数据库间的映射

    首先创建一个Book类,代码如下:

public class Book extends DataSupport {

    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;
    private String 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;
    }

}

    然后修改litepal.xml中的代码,在<list>标签中加入:

<list>
    <mapping class="包名.Book"></mapping>
</list>

    不管需要映射多少模型类,同样的方式加入到<list>中即可。

下属的所有操作,操作完之后可以使用“adb”去监听数据库表格的变化

三.实现创建和升级数据库

    创建代码如下:

Connector.getDatabase();

   升级数据库:

   当在修改已经创建好的数据表的属性或者添加新的表格时,需要升级数据库,Litepal只需要修改litepal.xml中的代码就可以完成审升级数据库操作,如需要将版本升级到2,只需要执行下述代码:

<version value="2" ></version>

四.实现增改删查

1.增添数据:

Book book = new Book();
book.setName("The Da Vinci Code");
book.setAuthor("Dan Brown");
book.setPages(454);
book.setPrice(16.96);
book.setPress("Unknow");
//Book类继承的DataSupport类中的方法
book.save();

2.更新数据:

Book book = new Book();
book.setPrice(14.95);
book.setPress("Anchor");
book.updateAll("name = ? and author = ?", "The Lost Symbol", "Dan Brown");

    现在有个问题,book对象的其他属性没有赋值,是默认值(比如int默认值为0,string默认值为null),会把符合条件行的其他属性变成默认值吗?并不会,这里的updateAll()方法并不会更新默认值。那如何更新为默认值,代码如下:

Book book = new Book();
book.setToDefault("pages");
book.updateAll();

3.删除数据:

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

4.查询数据:

//直接查询所有数据
List<Book> books = DataSupport.findAll(Book.class);

//条件查找

//需要什么属性添加什么方法,不需要不添加即可
//select用与指定查询哪几列的数据
//where用于指定查询的约束条件
//order用于指定排序方式
//limit用于指定查询结果的数量
//offset用于指定查询结果的偏移量

//这段代码表示的是查询Book表中第11~20条满足页数大于400这个条件的name、author和pages这三列数据,并且查询结果按照页数升序排列
List<Book> books = DataSupport.select("name", "author", "pages")
        .where("pages > ?", "400")
        .order("pages")
        .limit(10)
        .offset(10)
        .find(Book.class);

//查询表的第一条数据
Book books = DataSupport.findFirst(Book.class);

//查询表的最后一条数据
Book books = DataSupport.findLast(Book.class);

食用愉快。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_38367681/article/details/105712392
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 04:06:06
  • 阅读 ( 1318 )
  • 分类:数据库

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢