HarmonyOS 鸿蒙Next访问数据库实例(ORM方式,同一套代码,可同时应用在Android和HarmonyOS 鸿蒙Next)

HarmonyOS 鸿蒙Next访问数据库实例(ORM方式,同一套代码,可同时应用在Android和HarmonyOS 鸿蒙Next) 在使用HarmonyOS开发app应用时,经常会用到数据库存储数据。

要是用ORM框架,可以大大提高开发效率。

ORM Bee简单易用,文件小,性能好;同时支持Android和Harmony,还支持JDBC(可在JavaWeb等开发中使用)。

在Harmony和Android两个环境,可以用同一套Bee代码访问DB,提高代码重用,节省人力物。

以下说明,假设已创建了Data Ability工程。

工程全图如下:

一、添加jar包

将bee的jar包复制到entry包下的libs目录,右击jar包,

选择:Add as Libray… , 在跳出的对话框中选择ok.

完成后如下:

二、将相关配置注册到Bee

在启动的Ability ,添加相应的配置和注册信息。 若有自定义的配置在bee.properties则需要;则需要使用:BeeConfigInit.init();

将上下文注册到Bee;将创建表和更新表的回调类,注册到Bee;

以后就可以直接使用Bee了。

若有自定义的配置在 bee.properties,将该文件放在 entry\src\main\resources\rawfile 目录下。如下图所示(整个代码结构,也可参考)。

图片

三、定义安装app时,创建表和更新表的类

package ohos.samples.dataability;

import ohos.data.rdb.RdbOpenCallback;
import ohos.data.rdb.RdbStore;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.samples.dataability.bee.entity.*;
import ohos.samples.dataability.entity.Person;
import org.teasoft.honey.osql.autogen.Ddl;
import org.teasoft.honey.osql.core.HoneyContext;

public class MyRdbOpenCallback extends RdbOpenCallback {
    private static final String TAG = "MyRdbOpenCallback";
    private static final HiLogLabel LABEL_LOG = new HiLogLabel(3, 0xD000F00, TAG);

    @Override
    public void onCreate(RdbStore store) {
        try{
            HiLog.info(LABEL_LOG,"--------------------创建表.......开始.");
            String sql= Ddl.toCreateTableSQL(new Person()); //不想写sql可以自动生成
            HiLog.info(LABEL_LOG, "---------------create table sql:"+sql);
            store.executeSql(sql);
            store.executeSql(Ddl.toCreateTableSQL(new LeafAlloc()));
            store.executeSql(Ddl.toCreateTableSQL(new Orders()));
            store.executeSql(Ddl.toCreateTableSQL(new Tb_inaccount()));
            store.executeSql(Ddl.toCreateTableSQL(new Tb_outaccount()));
            store.executeSql(Ddl.toCreateTableSQL(new TestUser()));
        } catch (Exception e) {
            HiLog.error(LABEL_LOG, "---------------create table:"+e.getMessage());
        }
        HiLog.info(LABEL_LOG, "------------onCreate  finished!");
    }

    @Override
    public void onUpgrade(RdbStore store, int oldVersion, int newVersion) {
        HoneyContext.setCurrentAppDB(store);
        HiLog.info(LABEL_LOG,"--------------------更新表.......");
        HiLog.info(LABEL_LOG, "%{public}s", "DataBase upgrade");
        HoneyContext.removeCurrentAppDB();
    }
}

四,可以在其它AbilitySlice中使用Bee操作数据库了

以下是 select,update,insert,delete 操作的例子。

主要语句如下:

suid.insert(p);
suid.delete(new Person(), condition);
suid.update(p); //根据id修改对象
list = suid.select(new Person());

详细代码如下:

private void insert(Component component) {
    HiLog.info(LABEL_LOG, "----------------insert");
    try {
        Person p = new Person();
        p.setName(getRandomName());
        p.setAge(getRandomAge());
        suid.insert(p);
        HiLog.info(LABEL_LOG, "----------------insert结束.");
    } catch (Exception e) {
        HiLog.error(LABEL_LOG, "--------------insert--:" + e.getMessage());
    }
    query(true);
}

private void delete(Component component) {
    HiLog.info(LABEL_LOG, "----------------delete");
    try {
        Condition condition = BF.getCondition();
        condition.between("userId", 1, 2);
        suid.delete(new Person(), condition);
    } catch (Exception e) {
        HiLog.error(LABEL_LOG, "--------------insert--:" + e.getMessage());
    }
    query(true);
}

private void update(Component component) {
    HiLog.info(LABEL_LOG, "----------------update");
    try {
        Person p = new Person();
        p.setName("Tom_update");
        p.setAge(0);
        p.setUserId(1);
        suid.update(p); //根据id修改对象
    } catch (Exception exception) {
        HiLog.error(LABEL_LOG, "%{public}s", "update: dataRemote exception|illegalStateException");
    }
    query(true);
}

private void query(boolean queryAll) {
    HiLog.info(LABEL_LOG, "----------------query");
    getGlobalTaskDispatcher(TaskPriority.DEFAULT).asyncDispatch(() -> {
        List<Person> list = null;
        if (queryAll) {  //查所有
            list = suid.select(new Person());
        } else {
            list = suidRich.select(new Person(), 2, 5); //查从第2条开始的5条数据
        }
        appendText(list);
    });
}

更多关于HarmonyOS 鸿蒙Next访问数据库实例(ORM方式,同一套代码,可同时应用在Android和HarmonyOS 鸿蒙Next)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

赞一个

更多关于HarmonyOS 鸿蒙Next访问数据库实例(ORM方式,同一套代码,可同时应用在Android和HarmonyOS 鸿蒙Next)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


使用原生语法分页,效率更高。

更新不需要先查询出数据再更新; 删除也同理可得。

在HarmonyOS鸿蒙Next系统中,若希望通过ORM(对象关系映射)方式访问数据库,并且希望同一套代码能够同时应用于Android和HarmonyOS,你可以采用一些跨平台的ORM框架,这些框架通常支持多平台,包括但不限于Android和HarmonyOS。

一个常用的跨平台ORM框架是Room(虽然它主要由Jetpack组件提供,但可以在一定程度上适配HarmonyOS)。不过,请注意,Room官方主要支持Android,因此在HarmonyOS上的使用可能需要社区支持或自行适配。此外,还有其他第三方ORM框架,如Realm、GreenDAO或SQLite-ORM等,这些框架可能具有更好的跨平台兼容性。

在HarmonyOS上,你可能需要做一些额外的配置或调整,以确保ORM框架能够正常工作。例如,你可能需要配置不同的数据库路径或调整线程模型以适应HarmonyOS的运行时环境。

为了同时支持Android和HarmonyOS,你可以采用条件编译或平台特定的代码路径来区分不同平台的实现细节。

总之,选择并配置一个合适的ORM框架是关键。确保所选框架支持你的目标平台,并仔细阅读其文档以了解如何在HarmonyOS上进行适配。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部