Andriod开发 Room 数据库处理框架

1.Room框架

Room是Android Jetpack组件库中的一部分,它是一个SQLite数据库的抽象层,提供了更简单的API和更好的性能,适合于中大型应用程序。

2.Room的使用 

使用Room和之前使用SQLite搭建数据库的过程类似,但是更加简单了。

1)构建实体类

举个例子,我们要将书本信息存储到数据库中,那么可以先创建一个书本信息的新类,用于封装书本信息

在该实体类中,用注解表明实体:@Entity, 和对应表中的主键:@PrimaryKey

package com.example.study06.entity;


import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class BookInfo {
    @PrimaryKey(autoGenerate = true)
    private int id;

    private String name;
    private String isbn;
    private String publisher;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getIsbn() {
        return isbn;
    }

    public String getPublisher() {
        return publisher;
    }

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

    public void setName(String name) {
        this.name = name;
    }

    public void setIsbn(String isbn) {
        this.isbn = isbn;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    @Override
    public String toString() {
        return "BookInfo{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", isbn='" + isbn + '\'' +
                ", publisher='" + publisher + '\'' +
                '}';
    }
}

2)创建Dao接口:data access operation

这个接口不需要实现具体的增删改查操作,只需要用注解标记好对应的操作。

 

package com.example.study06.Dao;


import androidx.room.Dao;
import androidx.room.Delete;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import com.example.study06.entity.BookInfo;

import java.util.List;

@Dao
public interface BookDao {
    @Insert
    void insert(BookInfo... book);

    @Delete
    void delete(BookInfo... book);

    @Query("delete from BookInfo")
    void deleteAll();

    @Update
    void update(BookInfo... book);

    @Query("select * from BookInfo")
    List<BookInfo> queryAll();

    @Query("select * from BookInfo where name=:name order by id desc limit 1")
    BookInfo queryByName(String name);

}

Room会自动生成一个实现该接口的类,这个类可以完成增删查改的操作:

3)创建数据库的抽象类

也是类似的,用注解写清楚该数据库涉及的实体类。

package com.example.study06.database;

import androidx.room.Database;
import androidx.room.RoomDatabase;

import com.example.study06.Dao.BookDao;
import com.example.study06.entity.BookInfo;

@Database(entities = {BookInfo.class}, version = 1, exportSchema = true)
public abstract class BookDataBase extends RoomDatabase {
    public abstract BookDao bookDao();
}

4)在Myapplication的OnCreate函数中创建数据库

这样数据库的实例就是全局变量

package com.example.study06;

import android.app.Application;

import androidx.room.Room;

import com.example.study06.database.BookDataBase;

import java.util.HashMap;

public class MyApplication extends Application {

    public static MyApplication myapp;
    public HashMap<String, String> infoMap = new HashMap<>();

    public BookDataBase bookDataBase;
    public static MyApplication getInstance(){
        return myapp;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        myapp = this;
        bookDataBase = Room.databaseBuilder(this,BookDataBase.class,"book")
                .addMigrations()
                .allowMainThreadQueries()
                .build();
    }

    public BookDataBase getBookDataBase() {
        return bookDataBase;
    }
}

5)使用数据库

对BookInfo表进行增删查改

package com.example.study06;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import com.example.study06.Dao.BookDao;
import com.example.study06.entity.BookInfo;

import java.util.List;

public class RoomWriteActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText et_name;
    private EditText et_isbn;
    private EditText et_publisher;
    private BookDao bookDao;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_room_write);

        et_name = findViewById(R.id.et_name);
        et_isbn = findViewById(R.id.et_isbn);
        et_publisher = findViewById(R.id.et_publisher);

        findViewById(R.id.bt_save).setOnClickListener(this);
        findViewById(R.id.bt_delete).setOnClickListener(this);
        findViewById(R.id.bt_update).setOnClickListener(this);
        findViewById(R.id.bt_query).setOnClickListener(this);

        bookDao = MyApplication.getInstance().getBookDataBase().bookDao();

    }

    @Override
    public void onClick(View view) {
        String name = et_name.getText().toString();
        String isbn = et_isbn.getText().toString();
        String publisher = et_publisher.getText().toString();

        switch (view.getId()){
            case R.id.bt_save:
                BookInfo b1 = new BookInfo();
                b1.setIsbn(isbn);
                b1.setName(name);
                b1.setPublisher(publisher);
                bookDao.insert(b1);
                break;
            case R.id.bt_query:
                List<BookInfo> books = bookDao.queryAll();
                for(BookInfo b : books){
                    Log.d("test ", b.toString());
                }
                break;
            case R.id.bt_delete:

                BookInfo b2 = bookDao.queryByName(name);
                bookDao.delete(b2);
                break;
            case R.id.bt_update:
                BookInfo b3 = new BookInfo();
                BookInfo b4 = bookDao.queryByName(name);
                b3.setId(b4.getId());
                b3.setIsbn(isbn);
                b3.setName(name);
                b3.setPublisher(publisher);
                bookDao.update(b3);

                break;
        }
    }
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Room是Google为Android平台开发的一个SQLite对象映射数据库框架,它提供了一种简单的方式来访问SQLite数据库。下面是使用Room进行SQLite查询的基本步骤: 1. 定义实体类:在Room中,表是通过实体类来表示的。你需要定义一个Java类来表示数据库中的每个表,并使用注释来指定表名、列名等信息。 2. 定义DAO接口:DAO(Data Access Object)是用于访问数据库的接口。你需要定义一个接口来提供对实体类的CRUD操作。 3. 创建数据库:使用Room,你可以在应用程序中创建一个SQLite数据库。你需要创建一个继承自RoomDatabase的抽象类,并定义抽象方法来获取DAO对象。 4. 执行查询操作:在DAO接口中定义查询语句,并在应用程序中调用该方法来执行查询操作。以下是一个使用Room进行查询的示例: ```java @Dao public interface UserDao { @Query("SELECT * FROM user WHERE id = :userId") User getUserById(int userId); @Query("SELECT * FROM user WHERE name LIKE :name") List<User> getUsersByName(String name); @Insert void insertUser(User user); } ``` 在上面的示例中,@Query注释指定了查询语句,getUserById方法根据用户ID查询用户,getUsersByName方法根据名称查询用户,insertUser方法将用户插入数据库。 要使用上述查询方法,你需要创建一个RoomDatabase实例并获取UserDao对象。以下是一个使用Room进行查询的示例: ```java UserDatabase db = Room.databaseBuilder(getApplicationContext(), UserDatabase.class, "user.db").build(); UserDao userDao = db.userDao(); // 根据ID查询用户 User user = userDao.getUserById(1); // 根据名称查询用户 List<User> users = userDao.getUsersByName("John"); // 插入用户 User newUser = new User("Alice", "alice@example.com"); userDao.insertUser(newUser); ``` 在上面的示例中,我们创建了一个UserDatabase实例,并使用其userDao()方法获得UserDao对象。然后我们可以使用UserDao对象的方法来执行查询和插入操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值