Room数据库使用 | 青训营笔记

264 阅读3分钟

今天是我参加【第四届青训营】笔记创作活动的第9天

Room操作的数据库是SQLite,只是相对于直接操作SQLite数据库,使用Room会相对的方便。对SQLite数据库的操作做了一些封装,有利于对SQLite数据库的操作。

Room有三个组件包括Database、DAO和Entity。

Database

数据库类,用于保存数据库是SQLite数据库的直接操作者,通过Database数据库类直接对SQLite数据库进行操作。

Entity

数据实体类,也就是Java中的类,具体是通过数据库存放的表确定,每个表就视为一个实体类,实体类的变量就是数据库表的字段。

Dao

数据访问对象,提供操作数据库的具体方法,可以通过数据访问对象对数据库类进行操作,一般的数据操作为增删查改等。

在Android使用Room需要注意,需要在项目的Gradle目录下的build.Gradle文件中添加依赖:

dependencies{
      ...
      implementation "androidx.room:room-runtime:2.4.2"
      kapt "androidx.room:room-compiler:2.4.2"
}

创建Entity

@Entity
public class User{
    @PrimaryKey(autoGenerate = true)
    private Int id;
    @ColumnInfo("name")
    private String name;
    @ColumnInfo("password")
    private String password;
    
    ...
}

@Entity注解表示类为Room数据库的实体类在Room数据库中对应一张表单,@PrimaryKey(autoGenerate = true)注解表示id变量为主键,autoGenerate = true表示主键自增。@ColumnInfo("name")注解表示数据库表单中的字段,字段名称此注解用”name“来命名,@ColumnInfo("password")类似。

创建DAO

根据User实体创建一个对应的DAO,通过DAO可以对数据库对应的实体进行操作:

@Dao
public interface UserDao{
    @Insert
    void insertUser(User... user);
    @Query("SELECT * FROM user")
    List<User> queryUsers()
    @Updtate
    void updateUser(User... user);
    @Query("SELECT * FROM User ORDER BY id DESC")
    List<User> queryUsersByDesc();
    @Delete
    void delete(user... user);
}

@Dao注解确定接口为DAO类,和接口的定义一致,我们可以在其中添加各种对数据库的操作方法,@Updtate void updateUser(User... user);表示更新数据,参数表示不确定个数的User对象,你可以传递任意多个User对象进行数据库的更新操作都是通过实体对象定义的主键确定。@Query("SELECT * FROM User ORDER BY id DESC")注解表示操作为查询,查询语句为SELECT * FROM User ORDER BY id DESC,查询User表中的所有数据并且按照id的降序排列返回。

新建数据库类

@Database(entities = {Users.class},version = 1)
public abstract class UserDatabase extends RoomDatabase{
    public abstract UserDao getUserDao();
}

创建一个UserDatabase抽象类并且继承RoomDatabase,@Database(entities = {Users.class},version = 1)表示类被标识为数据库类,entities = {Users.class}表示实体类这里只提供了一个实体类,如果有多个可以添加至Users.class之后,entities = {Users.class,XXX.class}格式,version = 1数据库版本号。

public abstract UserDao getUserDao();抽象方法,返回之前创建的UserDao类的对象,这里只有一个,但是如果有多个Dao类格式依旧可以像这样添加上去。

使用Room数据库

UserDatabase userDatabase = Room.databaseBuilder(context,UserDatabase.class,"userDatabase")
    .build();
UserDao userDao = userDatabase.getUserDao();
...

使用的时候通过Room.databaseBuilder(context,UserDatabase.class,"user_database") .build();方法创建一个UserDatabase类的数据库,context参数为Android中的上下文,一般为this即可,"user_database"参数为数据库名称.最后通过数据库对象中的抽象方法获取相应的Dao对象,就能通过Dao类中的处理方法对数据库进行操作。

标题:【Android 客户端专场 学习资料二】第四届字节跳动青训营 - 掘金

网址:juejin.cn/post/712345…