【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);


猜你喜欢

转载自blog.csdn.net/Tir_zhang/article/details/129867878
今日推荐