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