鸿蒙Next5.0如何读取db数据
在鸿蒙Next5.0系统中,如何读取数据库(db)文件中的数据?具体需要调用哪些API或方法?有没有相关的代码示例可以参考?
2 回复
鸿蒙Next 5.0读取DB数据?简单说就是:用DataAbilityHelper和DataAbilityPredicates,像点外卖一样“下单”数据。记得先申请权限,不然数据库会傲娇地拒绝你!代码写错的话,小心数据和你玩捉迷藏哦~
更多关于鸿蒙Next5.0如何读取db数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙Next 5.0中,读取数据库数据主要通过关系型数据库(RDB) 实现。以下是完整步骤和示例代码:
1. 配置依赖
在module.json5中添加权限和依赖:
{
"module": {
"requestPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC" // 跨设备同步时需声明
}
],
"dependencies": [
"@ohos.data.relationalStore" // 关系型数据库模块
]
}
}
2. 初始化数据库
import relationalStore from '@ohos.data.relationalStore';
import { BusinessError } from '@ohos.base';
const TABLE_NAME = 'user';
const SQL_CREATE_TABLE = `CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (id INTEGER PRIMARY KEY, name TEXT, age INTEGER)`;
// 定义数据库配置
const config: relationalStore.StoreConfig = {
name: 'test.db', // 数据库文件名
securityLevel: relationalStore.SecurityLevel.S1 // 安全级别
};
let rdbStore: relationalStore.RdbStore | null = null;
// 初始化数据库
async function initDb() {
try {
rdbStore = await relationalStore.getRdbStore(globalThis.context, config);
await rdbStore.executeSql(SQL_CREATE_TABLE); // 建表
console.info('Database initialized');
} catch (err) {
console.error(`Failed to init DB. Code: ${(err as BusinessError).code}`);
}
}
3. 插入测试数据
async function insertUser(id: number, name: string, age: number) {
if (!rdbStore) return;
const valueBucket: relationalStore.ValuesBucket = {
'id': id,
'name': name,
'age': age
};
await rdbStore.insert(TABLE_NAME, valueBucket);
}
4. 查询数据
async function queryUsers() {
if (!rdbStore) return;
const predicates = new relationalStore.RdbPredicates(TABLE_NAME);
const columns = ['id', 'name', 'age']; // 要查询的列
try {
const resultSet = await rdbStore.query(predicates, columns);
console.info('ResultSet column names: ' + resultSet.columnNames);
console.info('ResultSet column count: ' + resultSet.columnCount);
// 遍历结果
while (resultSet.goToNextRow()) {
const id = resultSet.getLong(resultSet.getColumnIndex('id'));
const name = resultSet.getString(resultSet.getColumnIndex('name'));
const age = resultSet.getLong(resultSet.getColumnIndex('age'));
console.info(`ID: ${id}, Name: ${name}, Age: ${age}`);
}
resultSet.close(); // 关闭结果集
} catch (err) {
console.error(`Query failed. Code: ${(err as BusinessError).code}`);
}
}
5. 使用示例
async function demo() {
await initDb();
await insertUser(1, '张三', 25);
await queryUsers();
}
demo();
关键说明:
- RdbPredicates:用于构建查询条件(如
equalTo、and等)。 - 安全级别:根据数据敏感度选择S1~S4级别。
- 数据操作:支持增删改查、事务等完整SQLite功能。
通过以上代码即可在鸿蒙Next 5.0中实现数据库读取操作。注意处理异步异常和结果集资源释放。

