HarmonyOS 鸿蒙Next contain即时查询数据库数据

HarmonyOS 鸿蒙Next contain即时查询数据库数据

Image

/*这是Mainpage*/
Row() {
  Search({
    value: this.searchText,
    placeholder: CommonConstants.SEARCH_TEXT,
    controller: this.searchController
  })
    .width(CommonConstants.FULL_WIDTH)
    .borderRadius($r('app.float.radius_size_M'))
    .borderWidth($r('app.float.border_size_S'))
    .borderColor($r('app.color.border_color'))
    .placeholderFont({ size: $r('app.float.font_size_M') })
    .textFont({ size: $r('app.float.font_size_M') })
    .backgroundColor(Color.White)
    .onChange((searchValue: string) => {
      this.searchText = searchValue;
      if (searchValue === '') {
        this.AccountTable.query('', (result: AccountData[]) => {
          this.accounts = result;
        }, true);
      } else {
        this.AccountTable.query(String(searchValue), (result: AccountData[]) => {
          this.accounts = result;
        }, false);
      }
    })
    .onSubmit((searchValue: string) => {
      if (searchValue === '') {
        this.AccountTable.query('', (result: AccountData[]) => {
          this.accounts = result;
        }, true);
      } else {
        this.AccountTable.query(String(searchValue), (result: AccountData[]) => {
          this.accounts = result;
        }, false);
      }
    })
}
.width(CommonConstants.FULL_WIDTH)
.padding({ left: $r('app.float.edge_size_M'), right: $r('app.float.edge_size_M') })
.margin({ top: $r('app.float.edge_size_S'), bottom: $r('app.float.edge_size_S') })

/这是query模块/

query(barcodeType: string, callback: Function, isAll: boolean = true) {
  let predicates = new relationalStore.RdbPredicates(CommonConstants.ACCOUNT_TABLE.tableName);
  if (!isAll) {
    predicates.contains('barcodeType', barcodeType);
  }
  this.accountTable.query(predicates, (resultSet: relationalStore.ResultSet) => {
    let count: number = resultSet.rowCount;
    if (count === 0 || typeof count === 'string') {
      console.log(`${CommonConstants.TABLE_TAG}` + 'Query no results!');
      callback([]);
    } else {
      resultSet.goToFirstRow();
      const result: AccountData[] = [];
      for (let i = 0; i < count; i++) {
        let tmp: AccountData = {
          id: 0, accountType: 0, typeText: '', barcodeText: '', amount: 0
        };
        tmp.id = resultSet.getDouble(resultSet.getColumnIndex('id'));
        tmp.accountType = resultSet.getDouble(resultSet.getColumnIndex('accountType'));
        tmp.typeText = resultSet.getString(resultSet.getColumnIndex('typeText'));
        tmp.barcodeText = resultSet.getString(resultSet.getColumnIndex('barcodeText'));
        tmp.amount = resultSet.getDouble(resultSet.getColumnIndex('amount'));
        result[i] = tmp;
        resultSet.goToNextRow();
      }
      callback(result);
    }
  });
}

更多关于HarmonyOS 鸿蒙Next contain即时查询数据库数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复
query(barcodeText: string, callback: Function, isAll: boolean = true) {
  let predicates = new relationalStore.RdbPredicates(CommonConstants.ACCOUNT_TABLE.tableName);
  if (!isAll) {
    predicates.contains('barcodeText', barcodeText);
  }
}

更多关于HarmonyOS 鸿蒙Next contain即时查询数据库数据的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


已查出来,是搞错数据库的标题了barcodeText,谢谢

HarmonyOS鸿蒙Next中的即时查询数据库数据功能主要依赖于其分布式数据管理能力。鸿蒙系统通过分布式数据服务(Distributed Data Service, DDS)实现跨设备的数据同步与共享。开发者可以使用鸿蒙提供的API进行数据查询,系统会自动处理数据的分布式存储和查询优化。

在鸿蒙Next中,数据查询可以通过DataAbilityDataShare来实现。DataAbility是鸿蒙中用于数据访问的抽象层,开发者可以通过定义URI来访问不同的数据源。DataShare则是一个轻量级的数据共享框架,适用于跨应用的数据访问。

即时查询的实现通常依赖于数据库的索引和缓存机制。鸿蒙系统支持多种数据库类型,包括关系型数据库(如SQLite)和NoSQL数据库(如LiteOS的KV存储)。开发者可以根据需要选择合适的数据库类型,并通过SQL语句或API进行数据查询。

鸿蒙Next还提供了数据变更通知机制,当数据库中的数据发生变化时,系统会通知相关应用,从而实现数据的实时更新。开发者可以通过注册数据观察者(DataObserver)来监听数据变化,并在数据变化时触发相应的回调函数。

总的来说,HarmonyOS鸿蒙Next通过分布式数据管理和高效的数据查询机制,实现了即时查询数据库数据的功能,确保了数据的实时性和一致性。

回到顶部