HarmonyOS鸿蒙Next中Data Ability关系型数据库练习

HarmonyOS鸿蒙Next中Data Ability关系型数据库练习 一、具体场景

主要参照官方示范案例进行的操作练习。最后有完整的跑通的代码供大家参考。练习场景为数据库的交互-后台打印信息。

三、部分代码说明

“entry > src > main > java > com.xxx.xxx” 选择“File > New > Ability > Empty Data Ability”,设置“Data Name”为PersonDataAbility并完成创建此时,HUAWEI DevEco Studio将自动生成类PersonDataAbility及相关方法,其继承类Ability(默认实现了数据库的增/删/改/查API方法),部分示例代码如下:

PersonDataAbility中

package com.example.jltfshujuku;

import ohos.aafwk.ability.Ability;
import ohos.aafwk.ability.DataAbilityHelper;
import ohos.aafwk.content.Intent;
import ohos.data.DatabaseHelper;
import ohos.data.dataability.DataAbilityUtils;
import ohos.data.rdb.*;
import ohos.data.resultset.ResultSet;
import ohos.data.dataability.DataAbilityPredicates;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.utils.net.Uri;
import ohos.utils.PacMap;

import java.io.FileDescriptor;

public class PersonDataAbility extends Ability {
    private static final String DB_NAME = "persondataability.db";
    private static final String DB_TAB_NAME = "person";
    private static final String DB_COLUMN_PERSON_ID = "id";
    private static final String DB_COLUMN_NAME = "name";
    private static final String DB_COLUMN_GENDER = "gender";
    private static final String DB_COLUMN_AGE = "age";
    private static final int DB_VERSION = 1;

    private StoreConfig config = StoreConfig.newDefaultConfig(DB_NAME);
    private RdbStore rdbStore;

    private RdbOpenCallback rdbOpenCallback = new RdbOpenCallback() {
        @Override
        public void onCreate(RdbStore store) {
            store.executeSql("create table if not exists " + DB_TAB_NAME + " (" 
                            + DB_COLUMN_PERSON_ID + " integer primary key, "
                            + DB_COLUMN_NAME + " text not null, "
                            + DB_COLUMN_GENDER + " text not null, "
                            + DB_COLUMN_AGE + " integer)");
        }

        @Override
        public void onUpgrade(RdbStore store, int oldVersion, int newVersion) {
        }
    };

    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo");

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        HiLog.info(LABEL_LOG, "PersonDataAbility onStart");

        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        rdbStore = databaseHelper.getRdbStore(config, DB_VERSION, rdbOpenCallback, null);
    }

    @Override
    public ResultSet query(Uri uri, String[] columns, DataAbilityPredicates predicates) {
        RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);
        ResultSet resultSet = rdbStore.query(rdbPredicates, columns);

        if (resultSet == null) {
            HiLog.info(LABEL_LOG, "resultSet is null");
        }

        return resultSet;
    }

    @Override
    public int insert(Uri uri, ValuesBucket value) {
        HiLog.info(LABEL_LOG, "PersonDataAbility insert");

        String path = uri.getLastPath();
        if (!"person".equals(path)) {
            HiLog.info(LABEL_LOG, "DataAbility insert path is not matched");
            return -1;
        }

        ValuesBucket values = new ValuesBucket();
        values.putInteger(DB_COLUMN_PERSON_ID, value.getInteger(DB_COLUMN_PERSON_ID));
        values.putString(DB_COLUMN_NAME, value.getString(DB_COLUMN_NAME));
        values.putString(DB_COLUMN_GENDER, value.getString(DB_COLUMN_GENDER));
        values.putInteger(DB_COLUMN_AGE, value.getInteger(DB_COLUMN_AGE));

        int index = (int) rdbStore.insert(DB_TAB_NAME, values);
        DataAbilityHelper.creator(this, uri).notifyChange(uri);
        return index;
    }

    @Override
    public int delete(Uri uri, DataAbilityPredicates predicates) {
        RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);
        int index = rdbStore.delete(rdbPredicates);
        HiLog.info(LABEL_LOG, "delete: " + index);
        DataAbilityHelper.creator(this, uri).notifyChange(uri);
        return index;
    }

    @Override
    public int update(Uri uri, ValuesBucket value, DataAbilityPredicates predicates) {
        RdbPredicates rdbPredicates = DataAbilityUtils.createRdbPredicates(predicates, DB_TAB_NAME);
        int index = rdbStore.update(value, rdbPredicates);
        HiLog.info(LABEL_LOG, "update: " + index);
        DataAbilityHelper.creator(this, uri).notifyChange(uri);
        return index;
    }

    @Override
    public FileDescriptor openFile(Uri uri, String mode) {
        return null;
    }

    @Override
    public String[] getFileTypes(Uri uri, String mimeTypeFilter) {
        return new String[0];
    }

    @Override
    public PacMap call(String method, String arg, PacMap extras) {
        return null;
    }

    @Override
    public String getType(Uri uri) {
        return null;
    }
}

四、后续计划,数据库的数据用日志的形式在后台打印出来的效果完成后,需要进一步尝试前后端数据的交互。

五、代码地址:https://gitee.com/jltfcloudcn/jump_to/commit/b460666e2997ce284bb5e1ade0801344e045d246

3 回复
Get 666666666666666666

更多关于HarmonyOS鸿蒙Next中Data Ability关系型数据库练习的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Data Ability是用于数据管理的组件,支持关系型数据库的操作。Data Ability通过提供统一的接口来访问和管理数据,开发者可以通过它实现数据的增删改查等操作。

HarmonyOS中的关系型数据库基于SQLite,开发者可以使用SQL语句进行数据操作。Data Ability通过URI(统一资源标识符)来标识数据资源,并通过DataAbilityHelper类来与数据交互。

在练习中,通常会涉及以下步骤:

  1. 创建Data Ability:继承DataAbility类,并实现insertdeleteupdatequery等方法。
  2. 定义数据表结构:在onCreate方法中创建数据库和表。
  3. 实现数据操作:在Data Ability中编写逻辑,处理数据的增删改查请求。
  4. 使用DataAbilityHelper:在应用的其他部分通过DataAbilityHelper与Data Ability交互,执行数据操作。

示例代码片段:

import relationalStore from '@ohos.data.relationalStore';
import dataAbility from '@ohos.data.dataAbility';

export default class MyDataAbility extends dataAbility.DataAbility {
    onCreate() {
        // 创建数据库和表
        const sql = `CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)`;
        relationalStore.executeSql(this.context, sql, []);
    }

    insert(uri, valueBucket) {
        // 插入数据
        const sql = `INSERT INTO my_table (name) VALUES (?)`;
        relationalStore.executeSql(this.context, sql, [valueBucket.name]);
    }

    query(uri, columns, predicates) {
        // 查询数据
        const sql = `SELECT * FROM my_table`;
        return relationalStore.querySql(this.context, sql, []);
    }
}

通过以上步骤,开发者可以在HarmonyOS鸿蒙Next中练习使用Data Ability操作关系型数据库。

在HarmonyOS鸿蒙Next中,Data Ability用于管理应用数据,支持关系型数据库操作。以下是一个简单的练习步骤:

  1. 创建Data Ability:在src/main/java目录下创建MyDataAbility类,继承DataAbility,并实现onCreateinsertqueryupdatedelete等方法。

  2. 定义数据库:在resources/rawfile目录下创建mydatabase.db文件,定义表结构。

  3. 配置Ability:在config.json中注册MyDataAbility,并配置uri

  4. 操作数据库:在应用中通过DataAbilityHelper调用insertquery等方法进行数据操作。

  5. 测试:运行应用,验证数据库操作是否成功。

通过这些步骤,你可以在HarmonyOS中熟练使用Data Ability进行关系型数据库操作。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!