HarmonyOS 鸿蒙Next db 数据库事务批量执行 sql 语句(第一条为建表)无效果,数据库没有数据

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS 鸿蒙Next db 数据库事务批量执行 sql 语句(第一条为建表)无效果,数据库没有数据

db 数据库事务批量执行 sql 语句(第一条为建表)无效果,数据库没有数据 我从网络下载一个 sql 文件,根据读取文件文本将 sql 语句获取,通过事务执行 sql 语句进行建表和插入数据,执行第一条建表返回undefined,其他返回数字,查看数据库内容,为空

2 回复

建表语句返回的就是null这个结果,插入数据的sql返回的数字的话就是插入成功了,使用下面的demo查看插入表中的数据是否存在:

querysql(){

    const STORE_CONFIG :relationalStore.StoreConfig= {

      name: 'cxt_question.db', // 数据库文件名

      securityLevel: relationalStore.SecurityLevel.S1, // 数据库安全级别

      encrypt: false, // 可选参数,指定数据库是否加密,默认不加密

      // customDir: this._fileName + '/db', // 可选参数,数据库自定义路径。数据库将在如下的目录结构中被创建:context.databaseDir + '/rdb/' + customDir,其中context.databaseDir是应用沙箱对应的路径,'/rdb/'表示创建的是关系型数据库,customDir表示自定义的路径。当此参数不填时,默认在本应用沙箱目录下创建RdbStore实例。

      isReadOnly: false // 可选参数,指定数据库是否以只读方式打开。该参数默认为false,表示数据库可读可写。该参数为true时,只允许从数据库读取数据,不允许对数据库进行写操作,否则会返回错误码801。

    };

    relationalStore.getRdbStore(getContext(), STORE_CONFIG).then(async (rdbStore: relationalStore.RdbStore) => {

      console.info('Get RdbStore successfully.')

      rdbStore.beginTransaction();

      let sqlStr = 'SELECT * FROM `cxt_question`'

      let resultSet = rdbStore.querySqlSync(sqlStr)

      while (resultSet.goToNextRow()) {

        const id = resultSet.getLong(resultSet.getColumnIndex("question_id"));

        const name = resultSet.getString(resultSet.getColumnIndex("title"));

        console.info(`id=${id}, name=${name}`);

      }

      // 释放数据集的内存,若不释放可能会引起fd泄露与内存泄露

      resultSet.close();

      rdbStore.commit()

      console.log('成功')

    })

  }

resultSet没有直接转对象的原生方法,因为数据库的字段名称和对象的属性不一致,所以这个需要自行实现

更多关于HarmonyOS 鸿蒙Next db 数据库事务批量执行 sql 语句(第一条为建表)无效果,数据库没有数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next db数据库事务批量执行SQL语句时,若第一条为建表语句且执行后数据库无数据,可能原因及解决方法如下:

  1. 事务未提交:确保所有SQL语句执行后,事务已正确提交。在Next db中,事务的提交通常通过特定的API调用完成,如commitTransaction()。若事务未提交,则所有操作均不会生效。

  2. SQL语句错误:检查建表SQL语句及其他SQL语句是否正确无误。错误的SQL语句会导致事务回滚或执行失败。

  3. 数据库连接问题:确认数据库连接在执行SQL语句前已正确建立,且在整个事务执行过程中保持有效。

  4. 权限问题:检查执行SQL语句的数据库用户是否具有足够的权限来创建表和插入数据。

  5. 数据库引擎限制:某些数据库引擎可能对事务中的建表操作有特定限制,如不允许在事务中创建表。但考虑到Next db为鸿蒙系统内置数据库,此类限制较少见。

请检查上述可能原因,并逐一排查。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部