了解Android开源库--LitePal

开源库–LitePal

概述

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

1. 配置LitePal

1. 首先在app/build.gradle文件中声明引用该开源库的引用

implementation 'org.litepal.android:java:3.0.0'

2. 配置litepal.xml

右击app/src/main目录->New->Directory ,创建一个assets目录,然后在assets目录下再新建一个litepal.xml文件,接着编辑,内容如下

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

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

    <list>
    </list>
</litepal>

< dbname> 标签用于指定数据库名

< version>标签用于指定数据库版本号

< list>标签用于指定所有的映射模型

3. 配置LitePalApplication

修改AndroidManifest.xml中的代码

android:name="org.litepal.LitePalApplication"

2. 创建和升级数据库

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/create_database"
        android:text="Create database"/>
    <Button
        android:id="@+id/add_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Add data"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/update_data"
        android:text="Update data"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/delete_data"
        android:text="Delete data"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/query_data"
        android:text="Query data"/>
</LinearLayout>

1. 定义一个Book类

public class Book extends LitePalSupport {
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;
    private String press;

    public String getPress() {
        return press;
    }

    public void setPress(String press) {
        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;
    }
}

2. 修改litepal.xml

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

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

    <list>
        <mapping class = "com.example.litepaltest.Book"></mapping>
    </list>
</litepal>

这里使用< mapping>标签来声明我们要配置的映射模型类,一定要使用完整的类名。

3. 创建

现在只需要进行任意一次数据库的操作,BookStore.db数据库就会自动创建出来。

Button createDatabase = (Button)findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        LitePal.getDatabase();
    }
});

运行程序,点击一下按钮,然后通过adb shell 就可以查看数据库创建情况。

4. 升级

使用LitePal来升级数据库就非常的简单,不用思考任何的逻辑,只需要该你想改的任何内容,然后将版本号加1就行。

扫描二维码关注公众号,回复: 9056799 查看本文章

在Book类中加入

private String press;

public String getPress() {
    return press;
}

public void setPress(String press) {
    this.press = press;
}

同时,再添加一张表

public class Category {
    private int id;
    private String categoryName;
    private int categoryCode;

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

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public void setCategoryCode(int categoryCode) {
        this.categoryCode = categoryCode;
    }
}

改完了想改的东西,只需要将版本号加1。由于这里还添加了一个表,因此也需要将它添加到映射模型列表中。修改litepal.xml代码

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

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

    <list>
        <mapping class = "com.example.litepaltest.Book"></mapping>
        <mapping class="com.example.litepaltest.Category"></mapping>
    </list>
</litepal>

然后重新运行一下程序,点击Create database按钮,再查看一下最新的建表语句。

3. 向数据库中添加数据

1. Book类需要继承LitePalSupport类

《Android 第一行代码》中是继承DataSupport,但是在目前已经不再继承它了

具体大家可以参考GitHub LitePal项目的主页

2. 修改MainActivity中的代码

Button addData = (Button)findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Book book = new Book();
        book.setName("The Da Vinci Code");
        book.setAuthor("Dan Brown");
        book.setPages(454);
        book.setPrice(16.96);
        book.setPress("UnKnown");
        book.save();
    }
});

创建Book实例,调用Book的各种set方法对数据进行设置,最后再调用save()方法就能完成添加操作了。

4. 更新数据

Button updateData = (Button)findViewById(R.id.update_data);
updateData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Book book = new Book();
        book.setPrice(14.95);
        book.setPress("Anchor");
        book.updateAll("name=? and author = ?","The Lost Symbol","Dan Brown");
    }
});

首先new出一个Book实例,然后直接调用setPrice()和setPress()方法来设置要更新的数据,最后再调用updateAll()方法去执行更新操作。

updateAll()方法中可以指定一个条件约束,和SQLiteDataBase中的update()方法的where参数部分有点类似,如果不加指定条件语句的话,就表示更新所有数据。这里我们指定将所有书名是The Lost Symbol并且作者是Dan Brown的书价格更新为14.95,出版社更新为Anchor。

5. 删除数据

Button deleteData = (Button)findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        LitePal.deleteAll(Book.class,"price<?","15");
    }
});

这里调用LitePal.deleteAll()方法来删除数据,第一个参数用于指定删除哪张表的数据,Book.class就意味者删除Book表中的数据后面的参数用于指定约束条件,删除book表中价格低于15的书。

6. 查询数据

Button queryButton = (Button)findViewById(R.id.query_data);
queryButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        List<Book> books = LitePal.findAll(Book.class);
        for (Book book:books) {
            Log.d("MainActivity", "book name is"+book.getName());
            Log.d("MainActivity", "book author is"+book.getAuthor());
            Log.d("MainActivity", "book pages is"+book.getPages());
            Log.d("MainActivity", "book price is"+book.getPrice());
            Log.d("MainActivity", "book press is"+book.getPress());
        }
    }
});
发布了31 篇原创文章 · 获赞 9 · 访问量 1613

猜你喜欢

转载自blog.csdn.net/qq_43621019/article/details/99056882