Android数据存储(四)——LitePal 操作 SQLite

LitePal 是一款开源Android数据库框架,它采用了ORM的模式,将平时用到的一些数据库功能进行了封装

【项目地址】:https://github.com/LitePalFramework/LitePal
项目主页上就有详细的使用文档

新建一个空项目 day12_LitePalTest

一、配置 LitePal

引入依赖库:

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

app/src/main目录下新建一个文件夹assets,在该目录下建一个litepal.xml文件:

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

<dbname>标签数据库名
<version> 版本号
<list>指定映射模型

最后给AndroidManifest.xml文件加一行:

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

    <application
        android:name="org.litepal.LitePalApplication"
        ......
        >
        
    </application>

</manifest>

二、创建和升级数据库

1、准备

首先为了方便,把上篇文章的主布局粘贴过来:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="创建数据库"
        android:id="@+id/create_database"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/insert"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/update"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/delete"/>
    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:id="@+id/quary"/>

</LinearLayout>

2、对象关系映射ORM

定义一个Book类,快速生成其GetterSetter【快捷键:Alt+insert】

public class Book {
    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;
    }
}

Book类添加带映射模型表中,修改litepal.xml:

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

    <version value="1" />

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

3、创建数据库

LitePal.getDatabase():只需要这一句就够了

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        Button button_create = findViewById(R.id.create_database);
        button_create.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LitePal.getDatabase();
            }
        });
    }
}

运行找库,库里找表,其他两张自动建的表不用管:
在这里插入图片描述

4、升级数据库

要在Book表中增加一列press

public class Book {
......
    private String press;

    public String getPress() {
        return press;
    }

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

又要一张Category表:

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

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

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public int getCategoryCode() {
        return categoryCode;
    }

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

修改映射关系,记得版本号+1:

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

    <version value="2" />

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

重新运行并找表:
在这里插入图片描述

三、增

首先需要让"表类"继承自LitePalSupport

public class Book extends LitePalSupport {
......
}

然后用实例.save()即可

Button button_insert = findViewById(R.id.insert);
button_insert.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Book book = new Book();
        book.setName("老人与海");
        book.setAuthor("海明威");
        book.setPages(456);
        book.setPress("呼吸出版社");
        book.setPrice(18.88);
        book.save();
    }
});

运行找数据:
在这里插入图片描述

四、改

实例.updateAll(语句条件,占位值...)

Button button_update = findViewById(R.id.update);
button_update.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Book book = new Book();
        book.setPrice(12.00);
        book.setPress("大头出版社");
        book.updateAll("name = ? and author = ?", "老人与海", "海明威");
    }
});

在这里插入图片描述
补充:改为默认值:实例.setToDefault(列名)

五、删

方法一:实例.delete()
方法二:LitePal.deleteAll(表名.class, 约束, 占位值等)

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

在这里插入图片描述

六、查

LitePal.findAll(表名.class),会返回List

Button button_query = findViewById(R.id.quary);
button_query.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        List<Book> books = LitePal.findAll(Book.class);
        for (Book book : books){
            Log.d(TAG, "--------------------");
            Log.d(TAG, "书名:"+book.getName());
            Log.d(TAG, "作者:"+book.getAuthor());
            Log.d(TAG, "出版社:"+book.getPress());
            Log.d(TAG, "价格:"+book.getPrice());
            Log.d(TAG, "页数:"+book.getPages());
            Log.d(TAG, "--------------------");
        }
    }
});

在这里插入图片描述

七、补充

查询第一条数据:LitePal.findFirst(Book.class)
查询最后一条数据:LitePal.findLast(Book.class)
select查询几列:

LitePal.select("name", "author").find(Book.class);

where指定约束条件:

LitePal.where("pages > ?", "400").find(Book.class);

order指定排序方式:[desc降序, asc升序]

LitePal.order("price desc").find(Book.class);

litmit指定数量:

LitePal.litmit(3).find(Book.class);

offset指定偏移量:

LitPal.offset(2).find(Book.class);

原生查询:

LitePal.findBySQL("select * from Book where pages > ?", "400");
发布了156 篇原创文章 · 获赞 13 · 访问量 7218

猜你喜欢

转载自blog.csdn.net/qq_41205771/article/details/104191521