HarmonyOS鸿蒙Next中关系型数据库relationalStore使用注意事项

HarmonyOS鸿蒙Next中关系型数据库relationalStore使用注意事项

使用特点

SQLite引擎、支持复杂查询、事务。

适用场景

结构化数据存储(如联系人、交易记录)。

限制与约束

需要熟悉SQL语法;设计良好的表结构。

注意事项FAQ

  1. 锁屏未解锁(重启设备的首次锁屏)前,禁止进行数据库操作,否则会因为无法访问el2目录导致失败。
  2. 查询操作必须使用RdbPredicates构建查询条件,并且必须在使用完毕后调用ResultSet.close()释放资源。
  3. 关系型数据库开库时默认配置WAL日志模式,支持读并发或读写并发操作,但不支持写并发操作。
  4. 单条数据超过2M,会查询失败。调用query接口获取到resultSet后,再调用goToFirstRow或者goToNextRow将数据从磁盘文件填充进共享内存,由于共享内存只有2M大小,因此当单条数据超过2M后,会填充失败,导致查询失败。

更多关于HarmonyOS鸿蒙Next中关系型数据库relationalStore使用注意事项的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

鸿蒙Next关系型数据库relationalStore基于ZetaSQL,支持SQLite语法。使用时需注意:数据操作需在UI主线程外执行,建议使用TaskPool或Worker线程。数据库文件默认位于应用沙箱路径,通过context获取。数据库版本升级需在onUpgrade回调中处理表结构变更。支持加密,通过StoreConfig配置。事务操作需显式调用begin/commit/rollback。查询结果通过ResultSet遍历获取。

更多关于HarmonyOS鸿蒙Next中关系型数据库relationalStore使用注意事项的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


根据您提供的官方文档内容,这里对HarmonyOS Next中关系型数据库(relationalStore)的关键使用注意事项进行强调和补充说明:

  1. 首次锁屏与EL2目录访问:文档中提到的“重启设备后的首次锁屏”是一个极其重要的边界条件。在此状态下,系统的安全隔离机制会阻止应用访问受保护的数据库文件目录(el2)。务必在应用逻辑中规避或妥善处理此场景下的数据库操作,否则会直接导致操作失败。

  2. 资源释放(ResultSet):使用 RdbPredicates 进行查询后,获取到的 ResultSet 对象必须在使用完毕后显式调用 close() 方法。这是防止内存和数据库连接泄漏的关键步骤,强烈建议在 finally 代码块中或使用 try-with-resources 语法确保其执行。

  3. 并发操作模式:数据库默认启用WAL(Write-Ahead Logging)模式。这意味着:

    • 支持多个读取操作并发
    • 支持一个写入与多个读取操作并发
    • 不支持多个写入操作并发。多个线程或进程同时尝试写入(INSERT、UPDATE、DELETE)需要开发者自行通过事务或锁机制进行同步控制,否则可能引发数据竞争或损坏。
  4. 单行数据大小限制(2MB):这是一个硬性限制。当单条数据记录(即一行)的总大小超过2MB时,query 操作在底层将数据从磁盘加载到共享内存缓冲区时会失败。在设计表结构时,需避免单个字段或字段组合过大。对于超大型数据(如图片、长文本),应考虑使用文件系统存储路径,数据库中仅保存引用。

  5. 事务使用:对于需要保证原子性的一组操作,务必使用事务。在事务中执行批量插入、更新或删除,不仅能确保数据一致性,在WAL模式下通常也能获得更好的性能。注意事务的合理范围,避免长时间持有事务锁。

  6. 数据库升级与迁移:当应用版本更新需要修改表结构时,需在 onUpgrade 回调中实现严谨的数据库版本升级逻辑。正确处理字段新增、删除、表重构以及旧数据的迁移,是保证用户数据不丢失、应用平稳升级的核心。

  7. 性能与索引:对于频繁作为查询条件的字段,尤其是 WHEREORDER BYJOIN 子句中的字段,应考虑创建索引以大幅提升查询速度。但需注意,索引会增加插入、更新和删除操作的开销,并占用额外存储空间,需根据实际读写比例权衡。

总结,使用 relationalStore 时,开发者需重点关注生命周期与安全访问资源的严格管理并发写入的互斥控制单行数据容量以及表结构变更的平滑升级。遵循这些约束并善用事务与索引,是构建稳定高效数据存储层的基础。

回到顶部