立即注册
查看: 333|回复: 0

[鸿蒙OS技术分享] HarmonyOS应用开发数据交互-关系型数据库完整流程练习

已绑定手机
发表于 2022-1-12 14:04:09 | 显示全部楼层 |阅读模式 来自 广东省深圳市
1、创建一个空的java项目
1.jpg

2、创建data Ability
如下步骤所示,创建完成后会生成相应的文件,同时会帮您修改好配置文件。
2.jpg
配置文件(这部分自动生成,与你的目录结果、建议不要修改):
{
  "permissions": [
    "com.example.rdb.DataAbilityShellProvider.PROVIDER"
  ],
  "name": "com.example.rdb.Database.fristRDB",
  "icon": "$media:icon",
  "description": "$string:fristrdb_description",
  "type": "data",
  "visible": false,
  "uri": "dataability://com.example.rdb.Database.fristRDB"
}

3、编写创建数据库代码
编写的fristRDB.java文件:
package com.example.rdb.Database;
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 fristRDB 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";             //列 id
    private static final String DB_COLUMN_NAME = "name";                //列 name
    private static final String DB_COLUMN_GENDER = "gender";            //列 gender
    private static final String DB_COLUMN_AGE = "age";                  //列 age
    private static final int DB_VERSION = 1;                            //版本
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD001100, "Demo");
    private StoreConfig config = StoreConfig.newDefaultConfig(DB_NAME);  //通过指定数据库名称使用默认配置创建数据库配置。
    private RdbStore rdbStore;  //提供管理关系数据库 (RDB) 的方法。
    //   RdbOpenCallback 管理数据库创建、升级和降级。
    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) {
        }
    };
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        HiLog.info(LABEL_LOG, "fristRDB onStart");
        DatabaseHelper databaseHelper = new DatabaseHelper(this);
        //   根据配置创建或打开数据库。
        rdbStore = databaseHelper.getRdbStore(config, DB_VERSION, rdbOpenCallback, null);
    }
    /**
     * 数据查询
     * @param uri
     * @param columns
     * @param predicates
     * @return
     */
    @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;
    }
    /**
     * 数据添加
     * @param uri  插入的目标路径
     * @param value  插入的数据值
     * @return
     */
    @Override
    public int insert(Uri uri, ValuesBucket value) {
        HiLog.info(LABEL_LOG, "fristRDB 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),通知该表格数据的订阅者
        DataAbilityHelper.creator(this, uri).notifyChange(uri);
        return index;
    }
    /**
     *  数据删除
     * @param uri  删除的目标路径
     * @param predicates  删除条件
     * @return
     */
    @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;
    }
    /**
     * 数据修改
     * @param uri
     * @param value
     * @param predicates
     * @return
     */
    @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;
    }
    public void myInsert(){
        ValuesBucket values = new ValuesBucket();
        values.putInteger("id", 1);
        values.putString("name", "zhangsan");
        values.putInteger("age", 18);
        long id = rdbStore.insert("person", values);
    }
}
......

更多详细内容请下载附件查看
游客,如果您要查看本帖隐藏内容请回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表