Name Last Update
..
src/main Loading commit data...
.gitignore Loading commit data...
README.md Loading commit data...
build.gradle Loading commit data...
consumer-rules.pro Loading commit data...
proguard-rules.pro Loading commit data...

#2023/3/18 创建 Room 持久性库在 SQLite 上提供了一个抽象层,以便在充分利用 SQLite 的强大功能的同时, 能够流畅地访问数据库。具体来说,Room 具有以下优势: 1.针对 SQL 查询的编译时验证。 2.可最大限度减少重复和容易出错的样板代码的方便注解。 3.简化了数据库迁移路径。 出于这些方面的考虑,我们使用 Room,而不是直接使用 SQLite API。

Room 包含三个主要组件: 1.数据库类,用于保存数据库并作为应用持久性数据底层连接的主要访问点。 2.数据实体,用于表示应用的数据库中的表。 3.数据访问对象 (DAO),提供您的应用可用于查询、更新、插入和删除数据库中的数据的方法。 数据库类为应用提供与该数据库关联的 DAO 的实例。反过来,应用可以使用 DAO 从数据库中检索数据, 作为关联的数据实体对象的实例。此外,应用还可以使用定义的数据实体更新相应表中的行,或者创建新行供插入。

Room是一个SQLite抽象层,使用更加简单,通过注解的方式标记相关功能,编译时自动生成响应的 impl 实现类,具有丰富的编译时校验,错误提示。 类注解: @Entity:映射为数据库中的一张表。 @Dao:即 Data Access Objects,数据访问对象。 @Database:数据库,标注的类必须是抽象类,在注解中添加与数据库关联的表,包含使用 @Dao 注解标记的类的抽象方法。

类内注解: @PrimaryKey():标识主键。 @NonNull:字段非空标识。 @ColumnInfo(“XXX”):字段名。 @Insert():插入方法。 @Query():查询方法。 @Delete:删除方法。 @Ignore:忽视该方法或字段。

测试过程中错误点: 1、主键需要使用 @NonNull 标注。 2、tablename 必须和实体类名称相同,大小写也要一模一样。 3、@Database 中加入 exportSchema = false。 4、@Insert 注解方法的返回值是 Long,插入多个则是 List。 5、@Query() 可以用于执行 SQL 语句,参数引用方法为“:参数名 ”,“:”不能去。 6、Entity 实体类定义中,构造函数只能显式一个,其余不显式的使用 @Ignore 标注。 7、如果定义了列值唯一,主键自带唯一。当插入的数据该列在数据库中已经存在,则会报异常SQLiteConstraintException,try/catch 打个数据已存在的 Log 即可。 8、数据操作开子线程去拿,不然也会报错。

https://developer.android.google.cn/training/data-storage/room?hl=zh-cn