前言
android jetpack发布已经很久了 可能自己年龄大了 学习慢了很多 最近项目有用到数据库 所以想学习一下room 之前一直用的郭神的litepal room是基于sqlite封装的 相比sqlite肯定是方便使用!
依赖什么的这里就不说了 主要是 整个架构和流程 说明一下
项目结构
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}");
打印数据 利用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
|