Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第8章:数据持久化与网络请求

第8章:数据持久化与网络请求

关系型数据库

1. 关系型数据库概述

ArkTS通过@ohos.data.relationalStore模块提供了完整的关系型数据库支持,基于SQLite实现。关系型数据库适用于需要复杂查询、事务支持和数据一致性的场景,如用户信息管理、订单记录等结构化数据存储。

2. 核心概念

  • 数据库(Database):单个SQLite文件实例
  • 表(Table):数据存储的基本结构
  • 行(Row):表中的一条记录
  • 列(Column):表的字段定义
  • SQL语句:操作数据库的标准语言

3. 基本操作流程

3.1 创建数据库

import relationalStore from '@ohos.data.relationalStore';

const config: relationalStore.StoreConfig = {
  name: 'myDatabase.db',
  securityLevel: relationalStore.SecurityLevel.S1
};

relationalStore.getRdbStore(context, config, (err, store) => {
  if (err) {
    console.error(`Failed to get RdbStore. Code:${err.code},message:${err.message}`);
    return;
  }
  console.info('Succeeded in getting RdbStore.');
});

3.2 创建表

const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
    email TEXT UNIQUE
  )`;

store.executeSql(SQL_CREATE_TABLE, [], (err) => {
  if (err) {
    console.error(`Failed to create table. Code:${err.code},message:${err.message}`);
    return;
  }
  console.info('Succeeded in creating table.');
});

3.3 插入数据

const valueBucket = {
  'name': '张三',
  'age': 28,
  'email': 'zhangsan@example.com'
};

store.insert('user', valueBucket, (err, rowId) => {
  if (err) {
    console.error(`Failed to insert data. Code:${err.code},message:${err.message}`);
    return;
  }
  console.info(`Succeeded in inserting data. rowId:${rowId}`);
});

3.4 查询数据

const predicates = new relationalStore.RdbPredicates('user');
predicates.equalTo('name', '张三');

store.query(predicates, ['id', 'name', 'age', 'email'], (err, resultSet) => {
  if (err) {
    console.error(`Failed to query data. Code:${err.code},message:${err.message}`);
    return;
  }
  
  while (resultSet.goToNextRow()) {
    const id = resultSet.getLong(resultSet.getColumnIndex('id'));
    const name = resultSet.getString(resultSet.getColumnIndex('name'));
    console.info(`id: ${id}, name: ${name}`);
  }
  resultSet.close();
});

4. 高级特性

4.1 事务处理

store.beginTransaction();
try {
  // 执行多个SQL操作
  store.executeSql('UPDATE account SET balance = balance - 100 WHERE id = 1');
  store.executeSql('UPDATE account SET balance = balance + 100 WHERE id = 2');
  store.commit();
} catch (err) {
  store.rollback();
  console.error(`Transaction failed. Code:${err.code},message:${err.message}`);
}

4.2 数据加密

const encryptedConfig: relationalStore.StoreConfig = {
  name: 'secureData.db',
  securityLevel: relationalStore.SecurityLevel.S4,
  encryptKey: new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF])
};

5. 最佳实践

  1. 合理设计表结构:遵循数据库范式,建立适当的索引
  2. 使用预编译语句:防止SQL注入攻击
  3. 批量操作:使用事务提升性能
  4. 及时关闭资源:避免内存泄漏
  5. 错误处理:对所有数据库操作进行错误捕获

6. 常见问题

  • 数据库升级:通过onUpgrade回调处理版本迁移
  • 多线程访问:使用单例模式管理数据库连接
  • 性能优化:避免在主线程执行耗时操作

提示:ArkTS的关系型数据库API设计遵循HarmonyOS的分布式能力,未来可支持跨设备数据同步。

Last Updated:: 5/22/25, 5:00 PM