欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

神奇的 LitePal 操作数据库(一)

程序员文章站 2022-03-03 19:49:07
...

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

配置 LitePal

1,在 app/build.gradle 文件中添加如下:

compile 'org.litepal.android:core:1.5.1'

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

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--数据库名-->
    <dbname value="BookStore"></dbname>  
    <!--数据库版本号-->
    <version value="1"></version>
    <!--映射模型,稍后用到-->
    <list>

    </list>
</litepal>

3,在 AndroidMainfest.xml 中配置一下 LitePalApplication,如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.gyq.litepaltest">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        **android:name="org.litepal.LitePalApplication"**
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

创建数据库

1,首先定义一个实体类 Book.java

package com.gyq.litepaltest.entity;

import org.litepal.crud.DataSupport;

/**
 * 必须继承 DataSupport 类,才能进行 CRUD 操作
 * Created by gyq on 2017/7/6 09:24
 */
public class Book extends DataSupport{
    private int id;
    private String author;
    private double price;
    private int pages;
    private String name;

    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,将Book类添加映射模型列表中,修改 litepal.xml 中的代码:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <!--数据库名-->
    <dbname value="BookStore"></dbname>  
    <!--数据库版本号-->
    <version value="1"></version>
    <!--映射模型,注意一定要使用完整的类名>
    <list>
       <mapping class = "com.gyq.litepaltest.entity.Book"></mapping>
    </list>
</litepal>

3,修改 MainActivity.java 中代码

//创建数据库表
Button createDataBase = (Button)findViewById(R.id.create_database);
        createDataBase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Connector.getDatabase();
            }
        });

升级数据库

1,想要在Book类中添加一个press(出版社),直接修改代码如下:

public class Book extends DataSupport{
    ...

    private String press;

    public String getPress() {
        return press;
    }

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

    ...
}

2,想新建一张 Category 表,新建一个 Category 类

package com.gyq.litepaltest.entity;

/**
 * Created by gyq on 2017/7/6 09:34
 */
public class Category {
    private int id;
    private String categoryName;
    private int categoryCode;

    public int getId() {
        return id;
    }

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

    public int getCategoryCode() {
        return categoryCode;
    }

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

    public String getCategoryName() {
        return categoryName;
    }

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

3,版本号加1,修改 litepal.xml 中的代码:

<?xml version="1.0" encoding="utf-8"?>
<litepal>
    <dbname value="BookStore"></dbname>
    <version value="2"></version>
    <list>
        <mapping class = "com.gyq.litepaltest.entity.Book"></mapping>
        <mapping class = "com.gyq.litepaltest.entity.Category"></mapping>
    </list>
</litepal>

这样升级完成了,还保留之前表中的所有数据。

使用 LitePal 添加数据

1,实体类 Book 必须继承 DataSupport。
2,修改MainActivity.java 代码

        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("第一行代码");
                book.setAuthor("郭霖");
                book.setPages(568);
                book.setPrice(79);
                book.setPress("不知道");
                book.save();

            }
        });

3,运行程序,点击创建按钮,添加按钮,查询按钮。看打印的日志:

07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book name is第一行代码
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book author is郭霖
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book pages is568
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book price is79.0
07-06 06:56:30.894 2239-2239/com.gyq.litepaltest D/MainActivity: book press is不知道

使用 LitePal 更新数据

1,将价格改为 56.0,修改MainActivity中的代码:

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(56.0);
                book.updateAll("name = ? and author = ?","第一行代码","郭霖");
            }
        });

2,运行程序,点击更新按钮,在点击查询按钮,看 log 日志。

07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book name is第一行代码
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book author is郭霖
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book pages is568
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book price is56.0
07-06 07:04:26.262 2239-2239/com.gyq.litepaltest D/MainActivity: book press is不知道

使用 LitePal 删除数据

1,修改MainActivity中代码:

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

使用 LitePal 查询数据

1,修改MainActivity中代码:

Button queryData = (Button)findViewById(R.id.query_data);
        queryData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                List<Book> books = DataSupport.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());
                }


            }
        });
相关标签: 数据库 android