鸿蒙Next中sqlite数据库如何使用

在鸿蒙Next系统中,SQLite数据库的具体使用步骤是怎样的?能否提供创建数据库、建表以及增删改查操作的代码示例?开发过程中需要注意哪些兼容性问题?

2 回复

鸿蒙Next里用SQLite?简单!先导入@ohos.data.relationalStore,然后开搞:

  1. 建库建表:getRdbStore()配配置,executeSql()写SQL
  2. 增删改查:insert()/delete()/update()/query()走起
  3. 记得关连接: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.');
  });
}

注意事项:

  1. 数据库操作是异步的,需要使用回调函数处理结果
  2. 记得在适当的时候关闭结果集和数据库连接
  3. 安全级别可根据需要选择S1-S4
  4. 建议在应用退出时调用rdbStore.close()关闭数据库

以上是鸿蒙Next中使用SQLite数据库的基本流程,实际开发中建议使用Promise封装或async/await语法简化异步操作。

回到顶部