当前位置: 首页 > article >正文

【Android入门到项目实战--4.7】—— 怎么使用LitePal来操作数据库?

目录

一、使用LitePal操作数据库

1、配置LitePal

2、创建数据库

3、升级数据库

4、添加数据。

5、更新数据

6、删除数据

7、查询数据


一、使用LitePal操作数据库

        LitePal是一款开源的Android数据库框架,采用对象关系映射的模式,将我们平时开发常用的一些数据库功能进行了封装,使得操作数据库更简单了。

下面来使用一下。

先建一个新项目:LitePalTest

1、配置LitePal

在前面文章里讲解了如何配置LitePal,有需要跳转:点此跳转学习如何配置LitePal

2、创建数据库

首先修改activity_main.xml文件代码如下:

        有四个按钮,用于创建,增删改查数据库。

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

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

    <Button
        android:id="@+id/add_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加数据"/>

    <Button
        android:id="@+id/update_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="更新数据"/>

    <Button
        android:id="@+id/delete_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除数据"/>

    <Button
        android:id="@+id/query_data"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="查询数据"/>


</LinearLayout>

新建一个Book类,代码如下:

        在Book类中,定义了id、author等字段,并生成了相应的get和set方法。Book类就相当于数据库的Book表,类中的每一个字段分别对应了表中的每一个列,这就是对象关系映射。

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的代码,如下:

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

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

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

到此,准备工作已完成,下面开始创建数据库。

修改MainActivity代码,如下:

        LitePal.getDatabase()方法就是创建数据库的方法。

public class MainActivity extends AppCompatActivity {

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

3、升级数据库

下面向Book表中添加一个press列。

修改Book代码,如下:

public class Book {
  ...................
    private String press;
    public String getPress(){
        return press;
    }
    public void setPress(String press){
        this.press = press;
    }
 ......................

}

下面再添加一张Category表,新建Category类,如下:

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

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

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

改完所有想改的东西后,将版本号加1。

修改litepal.xml代码如下:

        这里改了版本号为2,在list里添加了刚才加入的表。

<?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>

4、添加数据。

修改Book类的代码,如下:

        继承LitePalSupport类。

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

}

修改MainActivity代码,如下:

         给添加数据按钮增加点击事件。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = findViewById(R.id.create_database);
        Button addData = findViewById(R.id.add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Book book = new Book();
                book.setName("Android");
                book.setAuthor("zxy");
                book.setPages(521);
                book.setPrice(9.9);
                book.setPress("no");
                book.save();
            }
        });
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LitePal.getDatabase();
            }
        });
    }
}

5、更新数据

修改MainActivity代码,如下:

        调用setPrice()和setPress()方法设置要更新的数据,再调用updateAll()方法执行更新操作,如果不指定条件则默认更新所有数据。这里将名字为Android,作者zxy,价格更新为19.9,地址为zzz。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = findViewById(R.id.create_database);
        Button updateData = findViewById(R.id.update_data);
  ........................
        updateData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Book book = new Book();
                book.setPrice(19.9);
                book.setPress("zzz");
                book.updateAll("name = ? and author = ?","Android","zxy");
            }
        });
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LitePal.getDatabase();
            }
        });
    }
}

6、删除数据

修改MainActivity代码如下:

        下面表示删除Book表中价格低于15的书。deleteAll()方法如果不指定条件则默认删除所有数据。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = findViewById(R.id.create_database);
        Button updateData = findViewById(R.id.update_data);
        Button addData = findViewById(R.id.add_data);
        Button deleteButton = findViewById(R.id.delete_data);
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                LitePal.deleteAll(Book.class,"price < ?","15");
            }
        });
.....................
    }
}

7、查询数据

修改MainActivity代码,如下:

         findAll()方法查询所有字段信息,这里用List集合保存,然后用迭代器取出。

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button createDatabase = findViewById(R.id.create_database);
        Button updateData = findViewById(R.id.update_data);
        Button addData = findViewById(R.id.add_data);
        Button deleteButton = findViewById(R.id.delete_data);
        Button queryButton = 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());
                }
            }
        });
.......................
    }
}

除了findAll()方法,还有其他查询API,如:

查询表中第一条数据:

Book firstBook =  LitePal.findFirst(Book.class);



http://www.kler.cn/a/5371.html

相关文章:

  • 【计算机视觉】单目深度估计模型-Depth Anything-V2
  • Elasticsearch:优化的标量量化 - 更好的二进制量化
  • UWB实操:用信号分析仪(频谱分析仪)抓取UWB频域的图像
  • c++领域展开第十幕——类和对象(内存管理——c/c++内存分布、c++内存管理方式、new/delete与malloc/free区别)超详细!!!!
  • 旷视科技C++面试题及参考答案
  • Clickhouse集群部署(3分片1副本)
  • python笔记
  • 天干地支(Java)
  • 【2023-3-29】JavaScript使用promise顺序调用函数并抛出异常
  • 第十二届蓝桥杯JavaB组省赛题解
  • Redis基本语法
  • [Rust GUI]fltk-rs的helloworld
  • 立体声骨传导蓝牙耳机哪款好一点,分享几款优秀的骨传导耳机
  • ubuntu22.04 服务器 SSH 密钥登录失败
  • Golang引入chatGPT
  • P2573 [SCOI2012]滑雪
  • Facebook多账号运营怎么防关联?
  • 显卡驱动一定要更新吗?怎么更新显卡驱动?
  • k8s之command、args 与 CMD、ENTRYPOINT的对应关系
  • 【H3C】VRRP2 及Vrrp3基本原理 华为同用
  • 【目标检测】---- YOLOX 旷视2021
  • 干货 | 关于逆变器,这些小知识你都了解么?
  • 给大家讲个笑话,拿了个offer,因为体检查出脂肪肝,公司把我拒绝了!
  • 用Owncast构建直播服务器
  • vue中的数据代理、
  • 积性函数及其初级应用