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

    文章

    3590

    浏览量

    63365
  • 关系型数据库

    关注

    0

    文章

    7

    浏览量

    2311
  • OpenHarmony
    +关注

    关注

    23

    文章

    3266

    浏览量

    15159
收藏 人收藏

    评论

    相关推荐

    查询数据库的操作

      查询数据库的操作顺序查询命令        顺序
    发表于 03-10 16:00

    简单的Access数据库查询示例

    一个简单的Access数据库查询示例,可用作登陆系统
    发表于 08-23 16:17

    labview数据库查询语句问题

    不知为什么,数据库查询查询语句老出现问题,有哪位大指点一下么
    发表于 10-02 11:48

    求助关于labview查询access数据库的问题

    初学者,想学习链接数据库方面的知识,遇到不少问题,下面求助各位大神,关于查询数据库的问题问题:如何通过“零部件名称”“故障模式”查询数据库
    发表于 03-14 21:18

    数据库连接

    在利用 LabVIEW数据库工具包操作数据库之前,需要先连接数据库,这就像操作文件之前,先要打开文件一样。在这里我们利用UDL连接数据库。Microsoft设计的ODBC标准只能访问
    发表于 06-29 21:29

    建立与数据库的连接

    在利用 LabVIEW数据库工具包操作数据库之前,需要先连接数据库,这就像操作文件之前,先要打开文件一样。在这里我们利用UDL连接数据库。Microsoft设计的ODBC标准只能访问
    发表于 07-01 21:24

    数据库查询

    数据库查询
    发表于 10-06 16:06

    数据数据库,按时间查询数据库

    数据数据库,在数据里新建表,按时间查询数据库
    发表于 01-09 16:08

    浅析对象数据库和NoSQL

    (阻抗不匹配)”。于是吗,关系数据库对于程序员的设计始终有相当大的限制,有的人擅长从领域模型去设计程序,有的人喜好从数据存储层面去设计代码。在对象
    发表于 05-27 06:36

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

    关系数据库的一个劣势就是 阻抗失谐(impedance mismatch):关系模型和内存中的数据结构之间存在差异
    发表于 06-03 06:03

    Hbase分布式非关系数据库安装部署步骤

    Hbase分布式非关系数据库安装与部署
    发表于 09-19 08:50

    Access数据库查询报错

    Access数据库查询最新20条记录报错,哪位朋友帮忙看看问题出在哪里?先谢了。
    发表于 03-16 22:47

    基于Data Ability的关系数据库数据管理能力,实现数据库相关应用服务的快速开发

    ,运行该工程,通过HUAWEI DevEco Studio HiLog工具查看结果,显示如下:11. 恭喜你你已经成功的学习了如何通过Data Ability创建关系数据库,并提供D
    发表于 09-26 16:43

    一款基于Java实现的小巧而强大的关系数据库

    H2 是一款基于 Java 实现的小巧而强大的关系数据库,支持嵌入式、客户端/服务器以及混合部署模式。H2 数据库适合嵌入小型应用程序、元数据
    发表于 10-27 06:12

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

    容易就上手的知识。本篇速成教程直接使用最精准和简短的文字,再配上讲解代码,让我们能在10分钟左右就能掌握最基本的数据库使用方法。数据库的三大要素:数据库、表、字段,接下来为大家介绍关系
    发表于 03-29 14:10