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
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
类来与数据交互。
在练习中,通常会涉及以下步骤:
- 创建Data Ability:继承
DataAbility
类,并实现insert
、delete
、update
和query
等方法。 - 定义数据表结构:在
onCreate
方法中创建数据库和表。 - 实现数据操作:在Data Ability中编写逻辑,处理数据的增删改查请求。
- 使用
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用于管理应用数据,支持关系型数据库操作。以下是一个简单的练习步骤:
-
创建Data Ability:在
src/main/java
目录下创建MyDataAbility
类,继承DataAbility
,并实现onCreate
、insert
、query
、update
、delete
等方法。 -
定义数据库:在
resources/rawfile
目录下创建mydatabase.db
文件,定义表结构。 -
配置Ability:在
config.json
中注册MyDataAbility
,并配置uri
。 -
操作数据库:在应用中通过
DataAbilityHelper
调用insert
、query
等方法进行数据操作。 -
测试:运行应用,验证数据库操作是否成功。
通过这些步骤,你可以在HarmonyOS中熟练使用Data Ability进行关系型数据库操作。