鸿蒙Next中sqlite数据库如何使用
在鸿蒙Next系统中,SQLite数据库的具体使用步骤是怎样的?能否提供创建数据库、建表以及增删改查操作的代码示例?开发过程中需要注意哪些兼容性问题?
2 回复
鸿蒙Next里用SQLite?简单!先导入@ohos.data.relationalStore,然后开搞:
- 建库建表:
getRdbStore()配配置,executeSql()写SQL - 增删改查:
insert()/delete()/update()/query()走起 - 记得关连接:
close()保平安
代码三五行,bug一整天~建议直接看官方文档,比问我靠谱!
更多关于鸿蒙Next中sqlite数据库如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next(HarmonyOS NEXT)中,SQLite数据库的使用主要通过@ohos.data.relationalStore模块实现。以下是基本使用步骤和示例代码:
1. 导入模块
import relationalStore from '@ohos.data.relationalStore';
import { BusinessError } from '@ohos.base';
2. 定义数据库配置
const config: relationalStore.StoreConfig = {
name: 'test.db', // 数据库名称
securityLevel: relationalStore.SecurityLevel.S1 // 安全级别
};
3. 获取Rdb连接
let rdbStore: relationalStore.RdbStore | undefined = undefined;
relationalStore.getRdbStore(this.context, config, (err, store) => {
if (err) {
console.error(`Failed to get RdbStore. Code:${err.code}, message:${err.message}`);
return;
}
rdbStore = store;
console.info('Succeeded in getting RdbStore.');
});
4. 创建数据表
const sql = `CREATE TABLE IF NOT EXISTS user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)`;
if (rdbStore) {
rdbStore.executeSql(sql, [], (err) => {
if (err) {
console.error(`Failed to executeSql. Code:${err.code}, message:${err.message}`);
return;
}
console.info('Succeeded in executingSql.');
});
}
5. 插入数据
const value: relationalStore.ValuesBucket = {
name: '张三',
age: 25
};
if (rdbStore) {
rdbStore.insert('user', value, (err, rowId) => {
if (err) {
console.error(`Failed to insert data. Code:${err.code}, message:${err.message}`);
return;
}
console.info(`Succeeded in inserting data: ${rowId}`);
});
}
6. 查询数据
const predicates = new relationalStore.RdbPredicates('user');
predicates.equalTo('name', '张三');
if (rdbStore) {
rdbStore.query(predicates, ['id', 'name', 'age'], (err, resultSet) => {
if (err) {
console.error(`Failed to query data. Code:${err.code}, message:${err.message}`);
return;
}
console.info('Succeeded in querying data.');
// 遍历结果集
if (resultSet && resultSet.goToFirstRow()) {
do {
const id = resultSet.getDouble(resultSet.getColumnIndex('id'));
const name = resultSet.getString(resultSet.getColumnIndex('name'));
const age = resultSet.getDouble(resultSet.getColumnIndex('age'));
console.info(`id: ${id}, name: ${name}, age: ${age}`);
} while (resultSet.goToNextRow());
resultSet.close(); // 关闭结果集
}
});
}
7. 更新数据
const updateValue: relationalStore.ValuesBucket = {
age: 26
};
const updatePredicates = new relationalStore.RdbPredicates('user');
updatePredicates.equalTo('name', '张三');
if (rdbStore) {
rdbStore.update(updateValue, updatePredicates, (err) => {
if (err) {
console.error(`Failed to update data. Code:${err.code}, message:${err.message}`);
return;
}
console.info('Succeeded in updating data.');
});
}
8. 删除数据
const deletePredicates = new relationalStore.RdbPredicates('user');
deletePredicates.equalTo('name', '张三');
if (rdbStore) {
rdbStore.delete(deletePredicates, (err) => {
if (err) {
console.error(`Failed to delete data. Code:${err.code}, message:${err.message}`);
return;
}
console.info('Succeeded in deleting data.');
});
}
注意事项:
- 数据库操作是异步的,需要使用回调函数处理结果
- 记得在适当的时候关闭结果集和数据库连接
- 安全级别可根据需要选择S1-S4
- 建议在应用退出时调用
rdbStore.close()关闭数据库
以上是鸿蒙Next中使用SQLite数据库的基本流程,实际开发中建议使用Promise封装或async/await语法简化异步操作。

