第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. 最佳实践
- 合理设计表结构:遵循数据库范式,建立适当的索引
- 使用预编译语句:防止SQL注入攻击
- 批量操作:使用事务提升性能
- 及时关闭资源:避免内存泄漏
- 错误处理:对所有数据库操作进行错误捕获
6. 常见问题
- 数据库升级:通过
onUpgrade回调处理版本迁移 - 多线程访问:使用单例模式管理数据库连接
- 性能优化:避免在主线程执行耗时操作
提示:ArkTS的关系型数据库API设计遵循HarmonyOS的分布式能力,未来可支持跨设备数据同步。
