鸿蒙Next如何读取db查询数据
在鸿蒙Next开发中,我想通过数据库查询获取数据,但不太清楚具体实现方法。请问应该如何连接数据库并执行查询操作?能否提供一个简单的代码示例,说明如何读取DB文件、执行SQL语句以及处理返回的结果集?另外,鸿蒙Next对数据库类型是否有特定要求或限制?
        
          2 回复
        
      
      
        在鸿蒙Next(HarmonyOS NEXT)中,读取数据库查询数据主要通过关系型数据库(RDB)实现。以下是详细步骤和示例代码:
1. 创建数据库和表
首先定义数据模型并初始化数据库:
import relationalStore from '@ohos.data.relationalStore';
// 定义表结构
const SQL_CREATE_TABLE = `
  CREATE TABLE IF NOT EXISTS user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
  )`
// 初始化数据库
const STORE_CONFIG = {
  name: 'test.db',
  securityLevel: relationalStore.SecurityLevel.S1
}
let rdbStore: relationalStore.RdbStore | null = null;
async function initDb() {
  try {
    rdbStore = await relationalStore.getRdbStore(globalThis.context, STORE_CONFIG);
    await rdbStore.executeSql(SQL_CREATE_TABLE);
    console.info('Database initialized');
  } catch (err) {
    console.error(`Failed to init database, code: ${err.code}, message: ${err.message}`);
  }
}
2. 插入测试数据
async function insertUser(name: string, age: number) {
  if (!rdbStore) return;
  
  const valueBucket = {
    'name': name,
    'age': age
  };
  
  try {
    await rdbStore.insert('user', valueBucket);
    console.info('Insert success');
  } catch (err) {
    console.error(`Failed to insert, code: ${err.code}, message: ${err.message}`);
  }
}
3. 查询数据
使用谓词(Predicates)构建查询条件:
import relationalStore from '@ohos.data.relationalStore';
async function queryUsers() {
  if (!rdbStore) return;
  
  try {
    // 构建查询条件(查询年龄大于18的用户)
    const predicates = new relationalStore.RdbPredicates('user');
    predicates.greaterThan('age', 18);
    
    // 执行查询
    const resultSet = await rdbStore.query(predicates, ['id', 'name', 'age']);
    
    // 遍历结果
    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(`User: id=${id}, name=${name}, age=${age}`);
    }
    
    resultSet.close(); // 关闭结果集
  } catch (err) {
    console.error(`Failed to query, code: ${err.code}, message: ${err.message}`);
  }
}
4. 完整调用示例
async function demo() {
  await initDb();
  await insertUser('张三', 20);
  await insertUser('李四', 17);
  await queryUsers(); // 只会查询到张三的记录
}
demo();
关键说明:
- RdbPredicates:用于构建查询条件(WHERE子句)
 - query()方法:第二个参数指定返回的列
 - ResultSet:需要手动遍历和关闭
 - 异常处理:所有数据库操作都需要捕获异常
 
注意事项:
- 需要在module.json5中申请ohos.permission.DATA权限
 - 数据库操作建议在非UI线程执行
 - 结果集使用后必须调用close()释放资源
 
这就是在鸿蒙Next中读取数据库查询数据的基本方法。实际开发中可根据业务需求调整查询条件和数据处理逻辑。
        
      
                  
                  
                  

