#我的鸿蒙开发手记# 云数据库VS本地数据库终极避坑指南 【基础】 原创

zhongcx
发布于 2025-5-7 17:20
浏览
0收藏

血泪总结!从权限报错到跨平台兼容,这些坑你绝对不能踩!


☁️ 云数据库实战全攻略

一、新手村:云数据库的"Excel世界观"

官方文档传送门
👉 一句话打通任督二脉
把云数据库当成云端Excel工作簿就对了!
#我的鸿蒙开发手记# 云数据库VS本地数据库终极避坑指南 【基础】-鸿蒙开发者社区

  • 📂 存储区 = Sheet页(比如用户库、订单库)
  • 📑 对象类型 = Sheet页的表头(定义字段规则)
  • 📝 数据 = 表格里的具体内容(张三的年龄、李四的订单)

实操入口指南

  1. 登录AGC平台 → 左侧【我的项目】
  2. 进入【云数据库】模块 → 右侧三件套(存储区/对象类型/数据)
  3. 可视化创建结构(参考配置指南

二、平板开发必看!官方Demo的隐藏Bug

血泪教训:官方Demo默认只适配手机!用平板调试会直接白屏!
#我的鸿蒙开发手记# 云数据库VS本地数据库终极避坑指南 【基础】-鸿蒙开发者社区
急救三件套

  1. 找到src/main/module.json5文件
  2. 修改deviceTypes字段:
// 错误写法:只支持手机  
"deviceTypes": ["phone"]  

// 正确姿势:支持手机+平板  
"deviceTypes": ["phone", "tablet"] // 注意逗号别漏!
  1. 重点! 修改后执行Build → Rebuild Project

三、表结构修改的隐藏操作链

每次修改云端表结构必须同步本地!
#我的鸿蒙开发手记# 云数据库VS本地数据库终极避坑指南 【基础】-鸿蒙开发者社区
完整操作流

  1. AGC平台 → 云数据库 → 对象类型 → 导出 → 选择json格式
  2. 将导出的文件重命名为schema.json
  3. 保存到AppScope/resources/rawfile/schema.json(目录不存在就手动创建)
  4. 致命细节:每次更新表结构后必须重新编译项目!

(参考官方指南


四、403权限报错终极解决方案

#我的鸿蒙开发手记# 云数据库VS本地数据库终极避坑指南 【基础】-鸿蒙开发者社区
遇到这个报错直接心肺停止:

Failed to upsert...403:205525004 // 翻译:你丫没权限!  

参考签名指南


五、跨平台兼容核弹级方案

想让安卓/iOS也能用鸿蒙云数据库?两种姿势任选:

方案1:SDK集成(适合原生开发)

  • 安卓集成指南
  • iOS集成指南
  • 核心配置
// 安卓示例代码  
AGConnectCloudDB cloudDB = AGConnectCloudDB.getInstance();  
CloudDBZoneConfig config = new CloudDBZoneConfig("你的存储区");  
cloudDB.openCloudDBZone(config); // 连接云端存储区

方案2:REST API(适合跨平台调用)

# 查询示例  
curl -X POST "https://your-api-endpoint" \  
     -H "Authorization: Bearer <your-token>" \  
     -d '{"query":"SELECT * FROM User"}'  

接口文档


六、数据只读不能改?权限埋雷指南

经典翻车现场:查数据美滋滋,一修改就报错!

自查九阴真经

  1. 对象类型ACL设置:
    • 登录AGC → 对象类型 → 权限设置 → 勾选"允许其他用户写入"
  2. 用户白名单配置:
    • 在数据对象的owner字段添加当前用户ID
  3. 云函数调用权限:

七、Upsert使用注意:增改通用

  1. 主键存在 → 执行更新操作
  2. 主键不存在 → 执行插入操作

官方详解


📱 本地数据库生存手册

一、调试神器:数据库可视化大法

还在用console.log调试?试试这个:

ohpm install @hadss/debug-db  # 一行命令逆天改命  

使用宝典

  1. 初始化调试器:
import {DebugDB} from '@hadss/debug-db';  
DebugDB.initialize(context); // 控制台打印访问URL  
  1. 浏览器打开http://localhost:8080/debug-db
  2. 实时查看/修改:
    • RDB表结构
    • Preferences键值对
    • KVStore数据

插件详情


二、四大基础操作避坑表

操作 代码示例 致命陷阱 保命方案
rdbStore.insert('user', value) 主键重复直接抛异常 先查询后插入
rdbStore.delete(predicates) 不加where全表删除 必须加条件校验
rdbStore.update(values, preds) 批量更新无事务会丢数据 用事务包裹+异常回滚
rdbStore.query(...) 结果集未关闭导致内存泄漏 必须调用.close()

三、事务处理的十八般武艺

经典死锁场景

// 错误示范!事务嵌套直接凉凉  
rdbStore.beginTransaction();  
rdbStore.beginTransaction(); // 这里会触发异常!  

正确保命姿势

try {  
  rdbStore.beginTransaction();  
  // 操作1...  
  // 操作2...  
  await rdbStore.commit();  
} catch (e) {  
  rdbStore.rollback(); // 回滚保平安  
  throw new Error("事务执行失败: " + e.message);  
}  

四、数据库升级

方案一:直接升级,需要实现各版本到目标版本的实现逻辑,优点在于性能好,缺点是逻辑复杂且较难维护。
方案二:一步一步升级到最新版本,只需要实现紧邻版本的升级逻辑,优点在于逻辑简单,便于维护,缺点在于比方案一性能差。
官方示例


💡 高频问题核弹防御指南

👉 云数据库FAQ
👉 本地数据库FAQ

血泪总结三原则

  1. 云数据库设计初期必须规划权限体系
  2. 本地操作必须用事务包裹关键步骤
  3. 遇到问题先查官方FAQ能省2小时!

觉得有用请点赞❤️收藏⭐
欢迎在评论区留下你的踩坑经历,我们一起完善这份指南!
#鸿蒙开发 #数据库实战 #程序员生存指南

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
1
收藏
回复
举报
回复
    相关推荐