HarmonyOS 鸿蒙Next Rdb数据库存储,请问以下代码无报错,为什么不论调用几次,最终查询时结果都为空对象{}

发布于 1周前 作者 vueper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Rdb数据库存储,请问以下代码无报错,为什么不论调用几次,最终查询时结果都为空对象{}



const STORE_CONFIG: relationalStore.StoreConfig =
  { name: "RdbZhongJi.db", securityLevel: relationalStore.SecurityLevel.S1 };
const SQL_CREATE_TABLE =
  'CREATE TABLE IF NOT EXISTS WIKI (ID INTEGER PRIMARY KEY AUTOINCREMENT, localityData TEXT, localityDataTitle TEXT)';
relationalStore.getRdbStore(getContext(this), STORE_CONFIG, async (err, store) => {
  if (err) {
    console.error(`请求数据库错误. Code:${err.code}, message:${err.message}`);
    return;
  }
  // 当数据库创建时,数据库默认版本为0 
  if (store.version === 0) {
    store.executeSql(SQL_CREATE_TABLE); // 创建数据表 
    // 设置数据库的版本,入参为大于0的整数 
    store.version = 3;
  } // 如果数据库版本不为0且和当前数据库版本不匹配,需要进行升降级操作 
  // 当数据库存在并假定版本为1时,例应用从某一版本升级到当前版本,数据库需要从1版本升级到2版本 
  if (store.version === 1) {
    // version = 1:表结构:WIKI (localityData, SALARY, CODES, ADDRESS) => version = 2:表结构:WIKI (localityData, localityDataTitle) 
    if (store !== undefined) {
      (store as relationalStore.RdbStore).executeSql('ALTER TABLE WIKI ADD COLUMN AGE INTEGER');
      store.version = 2;
    }
  }
  // 当数据库存在并假定版本为2时,例应用从某一版本升级到当前版本,数据库需要从2版本升级到3版本 
  if (store.version === 2) {
    // version = 2:表结构:WIKI (localityData, localityDataTitle) => version = 3:表结构:WIKI (localityData, localityDataTitle) 
    if (store !== undefined) {
      (store as relationalStore.RdbStore).executeSql('ALTER TABLE WIKI DROP COLUMN ADDRESS TEXT');
      store.version = 3;
    }
  }
  store.insert("WIKI",
    { "localityData": "JSON.stringify(this.data)", "localityDataTitle": "JSON.stringify(this.dataTypeTitle)", },
    (err: BusinessError, rowId: number) => {
      if (err) {
        console.error(`请求数据库错误${err.code}, message:${err.message}`);
        return;
      }
      console.info(`请求数据库rowId:${rowId}`);
      store.query(new relationalStore.RdbPredicates("WIKI").notEqualTo("localityData", null), (err, resultSet) => {
        if (err) {
          console.info(`请求数据库错误:${err.code}, message:${err.message}`);
          return;
        }
        console.info(`请求数据库`, JSON.stringify(resultSet));
      })
    });
});

更多关于HarmonyOS 鸿蒙Next Rdb数据库存储,请问以下代码无报错,为什么不论调用几次,最终查询时结果都为空对象{}的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

.notEqualTo("localityData", null)

数据类型是string。null无法匹配建议换成

.notEqualTo("localityData", '')

结果集resultSet需要进行遍历 。无法直接转json。进行输出查看。

参考demo:

import { relationalStore } from '@kit.ArkData';

import { BusinessError } from ‘@kit.BasicServicesKit’;

@Entry

@Component

struct Index {

  @State message: string = ‘Hello World’;

  build() {

    RelativeContainer() {

      Text(this.message)

        .id(‘HelloWorld’)

        .fontSize(50)

        .fontWeight(FontWeight.Bold)

        .alignRules({

          center: { anchor: container, align: VerticalAlign.Center },

          middle: { anchor: container, align: HorizontalAlign.Center }

        })

        .onClick(()=>{

          const STORE_CONFIG: relationalStore.StoreConfig = {

            name: “RdbZhongJi.db”,

            securityLevel: relationalStore.SecurityLevel.S1

          };

          const SQL_CREATE_TABLE = ‘CREATE TABLE IF NOT EXISTS WIKI (ID INTEGER PRIMARY KEY AUTOINCREMENT, localityData TEXT, localityDataTitle TEXT)’;

          relationalStore.getRdbStore(getContext(this), STORE_CONFIG, async (err, store) => {

            if (err) {

              console.error(请求数据库错误. Code:${err.code}, message:${err.message});

              return;

            }

            // 当数据库创建时,数据库默认版本为0

            if (store.version === 0) {

              store.executeSql(SQL_CREATE_TABLE); // 创建数据表

              // 设置数据库的版本,入参为大于0的整数

              store.version = 3;

            }

            // 如果数据库版本不为0且和当前数据库版本不匹配,需要进行升降级操作

            // 当数据库存在并假定版本为1时,例应用从某一版本升级到当前版本,数据库需要从1版本升级到2版本

            if (store.version === 1) {

              // version = 1:表结构:WIKI (localityData, SALARY, CODES, ADDRESS) => version = 2:表结构:WIKI (localityData, localityDataTitle)

              if (store !== undefined) {

                (store as relationalStore.RdbStore).executeSql(‘ALTER TABLE WIKI ADD COLUMN AGE INTEGER’);

                store.version = 2;

              }

            }

            // 当数据库存在并假定版本为2时,例应用从某一版本升级到当前版本,数据库需要从2版本升级到3版本

            if (store.version === 2) {

              // version = 2:表结构:WIKI (localityData, localityDataTitle) => version = 3:表结构:WIKI (localityData, localityDataTitle)

              if (store !== undefined) {

                (store as relationalStore.RdbStore).executeSql(‘ALTER TABLE WIKI DROP COLUMN ADDRESS TEXT’);

                store.version = 3;

              }

            }

            store.insert(“WIKI”, {

              “localityData”: “JSON.stringify(this.data)”,

              “localityDataTitle”: “JSON.stringify(this.dataTypeTitle)”,

            }, (err: BusinessError, rowId: number) => {

              if (err) {

                console.error(请求数据库错误${err.code}, message:${err.message});

                return;

              }

              console.info(请求数据库rowId:${rowId});

              store.query(new relationalStore.RdbPredicates(“WIKI”).notEqualTo(“localityData”, ‘’), (err, resultSet) => {

                if (err) {

                  console.info(请求数据库错误:${err.code}, message:${err.message});

                  return;

                }

                console.info(ResultSet column names: ${resultSet.columnNames}, column count: ${resultSet.columnCount});

                console.info(‘resultSet.goToNextRow()’)

                while (resultSet.goToNextRow()) {

                  const localityData = resultSet.getString(resultSet.getColumnIndex(‘localityData’));

                  const localityDataTitle = resultSet.getString(resultSet.getColumnIndex(‘localityDataTitle’));

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

                }

                // 释放数据集的内存

                console.info(请求数据库, JSON.stringify(resultSet));

                resultSet.close();

              })

            }

            );

          });

        })

    }

    .height(‘100%’)

    .width(‘100%’)

  }

} <button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

更多关于HarmonyOS 鸿蒙Next Rdb数据库存储,请问以下代码无报错,为什么不论调用几次,最终查询时结果都为空对象{}的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next Rdb数据库存储问题中,若代码无报错但查询结果为空对象{},可能原因如下:

  1. 数据未成功插入:检查插入数据逻辑,确认数据是否已正确写入数据库。可能由于事务未提交、插入语句有误或数据被覆盖导致。

  2. 查询条件不匹配:验证查询条件是否正确,确保查询条件与插入的数据一致。若查询条件有误,将无法匹配到已存在的数据。

  3. 数据库连接问题:确认数据库连接是否稳定,且每次操作都使用了有效的数据库连接。连接不稳定或未正确建立可能导致查询操作失败。

  4. 数据同步问题:在多线程或分布式环境中,可能存在数据同步问题。检查是否有其他线程或进程在查询前修改了数据。

  5. 数据库配置:检查数据库配置,如数据库文件路径、权限设置等,确保数据库能正常访问和操作。

  6. 版本兼容性:确认使用的鸿蒙Next Rdb数据库版本与代码兼容,避免因版本差异导致的问题。

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

回到顶部