0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenHarmony关系型数据库查询结果呈现

ITMING 来源:ITMING 作者: ITMING 2023-03-28 18:06 次阅读

1 ResultSet(结果集)

ResultSet(结果集)是OpenHarmony关系型数据库提供查询数据表返回结果的方法,提供了多种灵活的数据访问方式,以便于开发者获取各项数据,ResultSet属性如表1-1所示,ResultSet方法如表1-2所示。

表1-1 ResultSet属性

名称 类型 必填 说明
columnNames Array 结果集中所有列的名称
columnCount number 结果集中的列数
rowCount number 结果集中的行数
rowIndex number 结果集当前行的索引
isAtFirstRow boolean 结果集是否位于第一行
isAtLastRow boolean 结果集是否位于最后一行
isEnded boolean 结果集是否位于最后一行之后
isStarted boolean 指针是否移动过
isClosed boolean 当前结果集是否关闭

表1-2 ResultSet方法

名称 描述
getColumnIndex(columnName: string): number 根据指定的列名获取列索引columnName: 结果集中指定列的名称 number: 返回指定列的索引
getColumnName(columnIndex: number): string 根据指定的列索引获取列名columnIndex: 结果集中指定列的索引string: 返回指定列的名称
goTo(offset: number): boolean 向前或向后转至结果集的指定行,相对于当前行位置偏移offset: 表示相对于当前行位置偏移量boolean:操作成功,则为true,否则为false
goToRow(position: number): boolean 转到结果集的指定行position: 表示要移动到的指定位置boolean: 操作成功,则为true,否则为false
goToFirstRow(): boolean 转到结果集的第一行boolean: 操作成功,则为true,否则为false
goToLastRow(): boolean 转到结果集的最后一行boolean: 操作成功,则为true,否则为false
goToNextRow(): boolean 转到结果集的下一行boolean: 操作成功,则为true,否则为false
goToPreviousRow(): boolean 转到结果集上一行boolean: 操作成功,则为true,否则为false
getBlob(columnIndex: number): Uint8Array 以字节数组的形式获取当前行中指定列的值指定的列索引,从0开始Uint8Array: 以字节数组的形式返回指定列的值
getString(columnIndex: number): string 以字符串形式获取当前行中指定列的值columnIndex: 指定的列索引,从0开始string: 以字符串形式返回指定列的值
getLong(columnIndex: number): number 以Long形式获取当前行中指定列的值columnIndex: 指定的列索引,从0开始number: 以Long形式返回指定列的值。该接口支持的数据范围是:Number.MIN_SAFE_INTEGER~Number.MAX_SAFE_INTEGER,若超出该范围,则建议使用getDouble
getDouble(columnIndex: number): number 以double形式获取当前行中指定列的值columnIndex: 指定的列索引,从0开始number: 以double形式返回指定列的值
isColumnNull(columnIndex: number): boolean 检查当前行中指定列的值是否为nullcolumnIndex: 指定的列索引,从0开始boolean: 当前行中指定列的值为null,则返回true,否则为false
close(): void 关闭结果集

2 流程

3 步骤

3.1 获取ResultSet结果集

通过RdbStore实例的query()querySql()方法获得ResultSet结果集。

let predicates = new relationalStore.RdbPredicates(this.tableName);
let result = await this.rdbStore.query(predicates, columns);

3.2 自定义返回结果类

自定义TableResultSet类用于前台展示。

export class TableResultSet {
    private total: number;                 // 总条数
    private data: any;                     // 数据表数据

    setTotal(total: number) {
        this.total = total;
    }

    setData(data: any) {
        this.data = data;
    }
}

3.3 结果集转返回结果

ResultSet并不能直接用来展示,通过ResultSet提供的各类方法获取需要的信息

private resultToObject(result: relationalStore.ResultSet) {
    let trs = new TableResultSet();
    trs.setData(result.rowCount);
    let data: Array<any> = [];
    let count = result.rowCount;
    if (count === 0 || typeof count === 'string') {
      trs.setData([]);
    } else {
      // 从数据第一行开始读取
      result.goToFirstRow();
      for (let j = 0; j < count; j++) {
        let temp: any = {};
        for (let i = 0; i < this.fields.length; i++) {
          let field = this.fields[i];
          if (field.type === 'INTEGER' || field.type === 'integer') {
            temp[field.name] = result.getLong(result.getColumnIndex(field.name));
          } else if (field.type === 'REAL' || field.type === 'real') {
            temp[field.name] = result.getDouble(result.getColumnIndex(field.name));
          } else if (field.type === 'TEXT' || field.type === 'text') {
            temp[field.name] = result.getString(result.getColumnIndex(field.name));
          } else if (field.type === 'BLOB' || field.type === 'blob') {
            temp[field.name] = result.getBlob(result.getColumnIndex(field.name));
          }
        }
        data.push(temp);
        result.goToNextRow();
      }
      trs.setData(data);
    }
    return trs;
  }

4 呈现结果

  • 使用断点调试方式

  • 使用日志调试方式
Log.info(TAG, `Query of ${this.tableName} table data succeeded. data: ` + JSON.stringify(result));

  • 页面显示
// 显示表名称
Text(TableConstants.T_ACCOUNT_NAME)
  .fontSize(18)
  .fontWeight(700)
  .width('90%').height(54)
Column({space: 5}) {
  if (this.result !== null) {
    // 显示表字段
    GridRow({
      columns: TableConstants.T_ACCOUNT_FIELDS.length,
      direction: GridRowDirection.Row
    }) {
      ForEach(this.result.fields, (field) => {
        GridCol() {
          Text(field)
            .width("100%").height(54)
            .fontSize(16)
            .textAlign(TextAlign.Center)
        }
        .colStyle()
      })
    }
    .width('90%').height(54)
    .backgroundColor(0xE5E5E5)
    // 显示表数据
    ForEach(this.result.data, (item) => {
      GridRow({
        columns: TableConstants.T_ACCOUNT_FIELDS.length,
        direction: GridRowDirection.Row
      }) {
        ForEach(TableConstants.T_ACCOUNT_FIELDS, (field) => {
          GridCol() {
            this.Label(item[field.name].toString())
          }
          .colStyle()
        })
      }
      .width('90%').height(54)
      .backgroundColor(0xF5F5F5)
    }, temp => temp.toString())
  }
}
.width('100%')

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据库
    +关注

    关注

    7

    文章

    3199

    浏览量

    62877
  • 关系型数据库

    关注

    0

    文章

    7

    浏览量

    2306
  • OpenHarmony
    +关注

    关注

    22

    文章

    2596

    浏览量

    14708
收藏 人收藏

    评论

    相关推荐

    关系数据库与非关系数据库的区别浅析

    关系数据库的一个劣势就是 阻抗失谐(impedance mismatch):关系模型和内存中的数据结构之间存在差异关系数据库中不可以含有嵌套纪录,一个订单里面可能是多个数据表信息组成例如 客户信息表,价格信息表,信用卡信息表。
    发表于 06-03 06:03

    HarmonyOS关系数据库和对象关系数据库的使用方法

    数据库使用方法。数据库的三大要素:数据库、表、字段,接下来为大家介绍关系数据库和对象
    发表于 03-29 14:10

    基于数据库查询过程优化设计

    关系数据库管理与开发中,优化设计极大地提高数据库的性能。通过对一大数据库查询语句执行过程的讨论,提出了对同一表格进行多个选择运算的优化、多个表格的选
    发表于 02-27 16:05 18次下载

    数据查询

    查询一、实验目的通过基于关系网络数据库管理系统SQL Server的上机实验,使学生进一步了解关系数据模型及关系数据库管理系统的基本原理,标准的SQL语言的使用。1
    发表于 05-10 10:55 18次下载

    查询数据库的最完美技巧

    查询数据库的最完美技巧.rar
    发表于 03-15 14:15 22次下载

    数据库系统概论之如何进行关系查询处理和查询优化

    数据库系统概论之如何进行关系查询处理和查询优化主要内容包括了:1、关系数据库系统的查询处理 2、关系数据库系统的查询优化 3、代数优化4、物理优化
    发表于 11-15 15:12 11次下载
    <b>数据库</b>系统概论之如何进行<b>关系</b><b>查询</b>处理和<b>查询</b>优化

    数据库原理的关系代数详细讲解

    关系代数与关系数据库操作   
    发表于 10-31 11:53 5次下载

    数据库插入查询删除操作教程

    数据库插入查询删除操作教程
    发表于 12-07 09:57 1次下载

    什么是关系数据库

    关系数据库
    发表于 06-17 07:38 8767次阅读

    什么是非关系数据库

    关系数据库 谈到非
    发表于 06-17 15:49 2924次阅读

    hbase和关系数据库的区别

    关系数据库的区别就是对于传统数据库,增加列对于一个项目来讲,改变是非常大的。但是对于nosql,插入列和删除列,跟传统数据库里面的增加记录和删除记录类似
    发表于 12-27 15:51 1.1w次阅读
    hbase和<b>关系</b><b>型</b><b>数据库</b>的区别

    Python-mysql数据库基础

    查询语言,是一种用来操作 RDBMS的数据库语言,当前的关系数据库都支持使用SQL语言进行操作
    的头像 发表于 02-16 15:51 299次阅读
    Python-mysql<b>数据库</b>基础

    OpenHarmony关系数据库概述

    关系数据库(Relational Database, 以下简称RDB)是一种基于关系模型来管理数据数据库,是在SQLite基础上提供一套完整的对本地数据库进行管理的机制。
    的头像 发表于 03-28 18:08 390次阅读
    <b>OpenHarmony</b><b>关系</b><b>型</b><b>数据库</b>概述

    关系数据库的基本原理(什么是关系数据库

    关系数据库是基于实用和可重复使用的概念,是支持高性能交互查询、交易处理能力、安全性和灵活性的关键数据存储和维护方法。关系数据库的概念是基于全局的。可以想象成把不同表里的所有记录、字段都拆出来,变成一个个游离的数据块,也就是分量(Component)
    的头像 发表于 07-10 09:06 259次阅读

    python读取数据库数据 python查询数据库 python数据库连接

    数据库数据 python查询数据库 python数据库连接 Python是一门高级编程语言,广泛应用于各种领域。其中,Python在数据库处理方面有着广泛的应用,可以轻松地连接各种
    的头像 发表于 08-28 17:09 339次阅读