栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Android Jetpack组件之Room数据库使用

Android Jetpack组件之Room数据库使用

前言

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

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

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

项目结构

1.Export 实体类

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


@Entity
public class Export {

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

}
2.interface RoomDao

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


@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 getExports();
}

3.MyDatabase

创建继承RoomDatabase抽象类的抽象类,命名为MyDatabase;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 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}");

打印数据

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

SQliteStudio 下载地址

sqlitestudio-3.3.3中文版下载地址

CSDN下载地址

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

参考
Android Jetpack Room组件的使用无法查看到数据库表结构原因
参考
Android数据库room报错:You can either provide room.schemaLocation annotation processor argument解决方法

总结

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335013.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号