前言

android jetpack发布已经很久了 可能自己年龄大了 学习慢了很多
最近项目有用到数据库 所以想学习一下room 之前一直用的郭神的litepal room是基于sqlite封装的 相比sqlite肯定是方便使用!

android room怎么删除表 安卓room数据库_room

[google中国文档社区 关于room数据库的说明 ]

google中国文档社区 关于room数据库的说明

依赖什么的这里就不说了 主要是 整个架构和流程 说明一下

android room怎么删除表 安卓room数据库_数据库_02

项目结构

android room怎么删除表 安卓room数据库_数据库_03

1.Export 实体类

Export :创建实体类ExportBean,实体类名可作为查询时用的表名。

/**
 * Author by Lyu
 * Date on 2021/10/18-17:51
 * Description:创建实体类ExportBean,实体类名可作为查询时用的表名。
 */
@Entity
public class Export {

    @PrimaryKey(autoGenerate = true)
    @NonNull
    public int id;//自增长
    @NonNull
    public String exportName;//出货口名

}

2.interface RoomDao

创建数据访问接口(接口里面包含增删改查方法)
接口定义标明注解@Dao;插入数据标明@Insert注解;修改数据标明@update;删除数据标明@Delete注解;查询标明@Query注解;

/**
 * Author by Lyu
 * Date on 2021/10/18-17:56
 * Description:创建数据访问接口(接口里面包含增删改查方法)
 */

@Dao
public interface RoomDao {
    //插入
    @Insert
    void addExport(Export... exports);

    @Insert
    void addExport(Export export);

    //修改
    @Update
    void updateExport(Export export);

    //删除
    @Delete
    void deleteExport(Export export);

    //获取Export
    @Query("SELECT * FROM Export WHERE ExportName=:exportName")
    Export getExport(String exportName);

    //查询
    @Query("SELECT * FROM Export")
    List<Export> getExports();
}

3.MyDatabase

创建继承RoomDatabase抽象类的抽象类,命名为MyDatabase;entities包含与数据库关联的实体类列表,version是是数据库版本号。

/**
 * Author by Lyu
 * Date on 2021/10/18-18:11
 * Description:entities包含与数据库关联的实体类列表,version是是数据库版本号。
 */
@Database(entities = {Export.class}, version = 1)
public abstract class MyDatabase extends RoomDatabase {
   public abstract RoomDao exportDao();
}

4.ExportManager

创建User管理类,进行增加、删除、修改、查询用户信息:
官方原话提示:如果您的应用在单个进程中运行,则在实例化 AppDatabase 对象时应遵循单例设计模式。每个 RoomDatabase 实例的成本相当高,而您几乎不需要在单个进程中访问多个实例。

public class ExportManager {
    private static MyDatabase mDb;

    public static MyDatabase getInstance(Context context) {
        if (mDb == null) {
            mDb = Room.databaseBuilder(context,
                    MyDatabase.class,
                    "port.db")
                    .allowMainThreadQueries()
                    .build();
        }
        return mDb;
    }

    //新增
    public static synchronized void addExport(Context context, Export export) {
        getInstance(context).exportDao().addExport(export);
    }

    //查询
    public static synchronized Export getExport(Context context, String export) {
        return getInstance(context).exportDao().getExport(export);
    }

    //删除
    public static synchronized void deleteExport(Context context, Export export) {
        getInstance(context).exportDao().deleteExport(export);
    }

    //修改
    public static synchronized void updateExport(Context context, Export export) {
        getInstance(context).exportDao().updateExport(export);
    }

    //获取用户信息
    public static synchronized List<Export> getExports(Context context) {
        return getInstance(context).exportDao().getExports();
    }

}

实例化调用

val bean = Export()
        val bean2 = Export()
        val bean3 = Export()
        bean.exportName = "出货口B"
        bean2.exportName = "出货口C"
        bean3.exportName = "出货口D"
        ExportManager.addExport(this, bean)
        ExportManager.addExport(this, bean2)
        ExportManager.addExport(this, bean3)

        val users: Export = ExportManager.getExport(this,"出货口B")
        Log.e("TAG","----------------${users.exportName}");

打印数据

android room怎么删除表 安卓room数据库_数据库_04


利用SQliteStudio可视化工具 查看生成的.db文件

android room怎么删除表 安卓room数据库_android room怎么删除表_05

SQliteStudio 下载地址

sqlitestudio-3.3.3中文版下载地址

room生成的db文件无法打开的原因

总结

学习是个不断的过程 虽然过程有点苦 但是忆苦思甜 结果是甜的!
keep up!!