在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<NodeEntity> 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。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐