> 文档中心 > 鸿蒙-实践课程五 android、HarmonyOS Database

鸿蒙-实践课程五 android、HarmonyOS Database

在android中使用到数据包括 sqlite、mysql等等,使用最多是 greenDao, 是 Android中一个开源的对象关系映射框架,能够提供一个接口通过操作对象的方式去操作关系型数据库,完成 Java 对象的存储,更新,删除和查询。Room:谷歌官方的数据库框架,基于sqlite 进行了封装,我们可以直接使用room 来进行数据库的访问。Realm:完美替代SQLite,核心包含C++库,同时支持Android和Ios ,是专门为移动平台设计的NoSql 数据库。SQL:存在特定结构的表中,常以数据库表形式存储数据NoSQL:更加灵活和可扩展,存储方式可以是JSON文档,哈希表或者其他方式。
从使用上,android使用步骤主要:1、配置.gradle 
greendao-gradle-plugin
//GreenDao插件apply plugin: 'org.greenrobot.greendao'
dependencies { //GreenDao依赖添加    implementation 'org.greenrobot:greendao:3.2.2'}
配置可以默认,也可以进行定制配置
greendao {    // 数据库版本号    schemaVersion 1    // 生成数据库文件的目录    targetGenDir 'src/main/java'    // 生成的数据库相关文件的包名    daoPackage 'com.nianlun.greendao.gen'}
利用@Entity 标签定义尸体类,进行android studio编译配置的com.nianlun.greendao.gen包下生成了三个对应类文件DaoMaster、DaoSession和xxxDao-你定义的尸体类名称,之后所有相关的数据库操作都依靠这三个文件了:
  • DaoMaster:使用greenDAO的切入点。DaoMaster保存数据库对象(SQLiteDatabase)并管理特定模式的DAO类(而不是对象)。 它具有静态方法来创建表或将它们删除。 其内部类OpenHelper和DevOpenHelper是在SQLite数据库中创建模式的SQLiteOpenHelper实现。一个DaoMaster就代表着一个数据库的连接;
  • DaoSession:管理特定模式的所有可用DAO对象,您可以使用其中一个getter方法获取。 DaoSession还为实体提供了一些通用的持久性方法,如插入,加载,更新,刷新和删除。 DaoSession可以让我们使用一些Entity的基本操作和获取Dao操作类,DaoSession可以创建多个,每一个都是属于同一个数据库连接的;
  • XxDAO:数据访问对象(DAO)持续存在并查询实体。 对于每个实体,GreenDAO生成一个DAO。 它比DaoSession有更多的持久化方法,例如:count,loadAll和insertInTx等。
 private DaoMaster mDaoMaster; private DaoMaster.DevOpenHelper mHelper; private DaoSession mDaoSession;
 DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(mApplication, DB_NAME, null); mDaoMaster = new DaoMaster(helper.getWritableDatabase());
建立自己操作类,对应数据库尸体。harmonyos是否一样?

鸿蒙支持create file,file中选择ability,自动生成:query、instert、update等等函数,也可以自己创建。为何自动创建这类型函数?

因为父类就有

Ability extends AbilityContext implements ILifecycle;AbilityContext类主要是类似avtivity中的context,而alibity本身比android acticity、fragment多一些特征操作类。

当然建议采用注解进行处理,就一部,但是需要async gradle后,不然像我一直在调试,总是不行。

compileOptions {    annotationEnabled true}

1、建立entity类,制定tableb,继承ormobject,orm就很清楚映射原理了,无非就是序列化后进行尸体映射。ormobject主要rowid、equals 、code对比判断等简单操作。其他如android注解一样。

@Entity(tableName = "nodes")public class xxxEntity extends OrmObject

一般为了更集中管理,还会建立dao类,继承自己定义查询、插入、删除等接口实现。

public interface NodeDao {    boolean insert(NodeEntity entity);    boolean update(NodeEntity entity);    boolean delete(int id);    List query();    NodeEntity queryNodeById(int id);}
public class NodeDaoImpl implements NodeDao 

这里面用到,很熟悉味道了吧:

DatabaseHelper helper = new DatabaseHelper(context);ormContext = helper.getOrmContext("NodeDB","node.db", NodeDatabase.class);OrmContext  实际context基本操作一样。实际操作会使用到OrmDatabase操作函数,可以继承一个类经扩展。如:
@Database(entities = {NodeEntity.class},version = 1)public abstract class NodeDatabase extends OrmDatabase {}

这里会看到,我们build中会自动生成:NodeDatabaseImpl操作类 可以不用管理。下面如一些数据库操作类。

ohos.data.orm 
OrmDatabase 
OrmContext 
OrmPredicates

介绍关系型数据库

 

剩下就是:native 的sqlite组件了,这个就是大家看不懂的c、c++建议还是可以看看。

 

 Rdb接口主要是持久化,简单说如何存储,存储再磁盘还是缓存等等,我们用redio举例

Redis持久化RDB和AOF:RDB数据保存到硬盘,AOF每次执行的写命令保存到硬盘(类似于MySQL的binlog);这里不讨论各自优缺点,但是rdb对于快速生成数据的移动端而言,更实用,

当前进程中的数据生成快照保存到硬盘(因此也称作快照持久化),保存的文件后缀是rdb,可以读取快照文件恢复数据。

Harmonyos有涉及到:日志模式 wal、落盘模式 full、大小限制2m左右、限制4个链接。

Write-Ahead log 预写日志

预写日志(WAL,Write-Ahead Log)将每次状态更新抽象为一个命令追加写入一个日志中,这个日志只追加写入,也就是顺序写入,所以 IO 会很快。相比于更新存储的数据结构并且更新落盘这个随机 IO 操作,写入速度更快了,并且也提供了一定的持久性,也就是数据不会丢失,可以根据这个日志恢复数据--(来自网络描述)

主要流程函数

storeconfig.BUILER

RDBOpencallBack

databaseHelper

条件操作:absrdbpredicates子类:rdbpredicates、rawrdbpredicates,叫谓词。

结果:resultset

事务:rdbstore

harmonyos还支持,轻量型偏好数据库,key-value型、非关系型、偏好型。还支持文件型存储,preferences。

女主播