HarmonyOS鸿蒙Next中如何在子线程往数据库批量插入大量数据

HarmonyOS鸿蒙Next中如何在子线程往数据库批量插入大量数据 如何在子线程往数据库批量插入大量数据,代码写了一天,还是没成功,代码截图如下:

先从文件读取数据,解析后循环存入数据库。

现在的问题:现在使用taskpool做子线程处理,会出现数据插入不进去,报错看第二张图。但是我如果去掉taskpool直接执行,数据可以正常插入,只不过由于数据量过大,把主线程给爆了,闪退。

有什么解决办法吗?

数据库用到了 "@liushengyi/smartdb": "4.0.1",这个开源框架

cke_172.png

报错截图:

cke_9175.png


更多关于HarmonyOS鸿蒙Next中如何在子线程往数据库批量插入大量数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

看报错应该是子线程执行数据库操作时上下文的问题,需要创建子线程的时候将主线程的context传递到子线程。

更多关于HarmonyOS鸿蒙Next中如何在子线程往数据库批量插入大量数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


楼主解决这个问题了吗,我也想用taskpool和三方件dataorm多线程插入大量数据,没搞明白

在HarmonyOS鸿蒙Next中,若需在子线程中批量插入大量数据到数据库,可以使用DataAbilityHelperValuesBucket进行操作。首先,确保在子线程中获取DataAbilityHelper实例,然后通过ValuesBucket构建要插入的数据集。使用DataAbilityHelperbatchInsert方法进行批量插入。以下是一个示例代码片段:

import featureAbility from '@ohos.ability.featureAbility';
import dataAbility from '@ohos.data.dataAbility';

let dataAbilityHelper = featureAbility.acquireDataAbilityHelper("dataability://com.example.myapplication.DataAbility");

let values = [];
for (let i = 0; i < 1000; i++) {
    let valueBucket = new dataAbility.ValuesBucket();
    valueBucket.putString("name", `User${i}`);
    valueBucket.putInt("age", i);
    values.push(valueBucket);
}

dataAbilityHelper.batchInsert("dataability://com.example.myapplication.DataAbility", values)
    .then((data) => {
        console.info("Batch insert success: " + data);
    })
    .catch((error) => {
        console.error("Batch insert failed: " + error);
    });

这段代码展示了如何在子线程中批量插入1000条数据。DataAbilityHelper用于操作数据库,ValuesBucket用于构建单条数据,batchInsert方法用于执行批量插入操作。

在HarmonyOS鸿蒙Next中,如果需要在子线程中批量插入大量数据到数据库,可以按照以下步骤操作:

  1. 创建数据库连接:在子线程中通过RdbStore对象建立数据库连接。

  2. 开启事务:在插入数据前,调用beginTransaction()开启事务,确保批量插入的原子性。

  3. 执行批量插入:在循环中逐条插入数据,或使用insertBatch()方法批量插入。

  4. 提交事务:插入完成后,调用commit()提交事务。如果出现异常,调用rollback()回滚。

  5. 关闭连接:操作完成后,关闭数据库连接。

示例代码:

RdbStore rdbStore = ...; // 获取RdbStore对象
rdbStore.beginTransaction();
try {
    for (Data data : dataList) {
        rdbStore.insert(data);
    }
    rdbStore.commit();
} catch (Exception e) {
    rdbStore.rollback();
} finally {
    rdbStore.close();
}

通过事务机制,可以有效提升批量插入的性能和可靠性。

回到顶部