Web开发学习笔记:Ionic4使用SQLite数据库,将查询结果动态转为数组

以下代码使用vsCode+TypeScript编写

1.定义数据查询方法

 /**
   * 数据表数据查询
   * @param tableName 类型:string 查询数据的数据表名称
   * @param sqlParam 类型:Array<any> 拼接SQLWHERE条件语句需要的参数信息
   * @param selectCol 类型:string 查询结果列(可选参数,参数如果不传值则默认为 * )
   */
  SelectData(tableName: string, sqlParam: Array<any> , selectCol?: string) {
    this.dataBase.transaction((tx) => {
      let selectSql = ' SELECT ';
      let sqlWhere = ' WHERE 1=1 ';
      sqlParam.forEach(item => {
        if (isNumber(item.colValue)) { // 判断值是否为数值类型
          sqlWhere += ' AND ' + item.colName + '=' + item.colValue ;
        } else if (isString(item.colValue)) { // 判断值是否为字符类型
          sqlWhere += ' AND ' + item.colName + '=\''  + item.colValue + '\'' ;
        }
      });
      console.log('selectCol参数值: ' + selectCol);
      if (selectCol === undefined) {
        selectCol = '*';
      }
      selectSql += selectCol + ' FROM ' + tableName + sqlWhere;
      console.log('查询SQL: ' + selectSql);
      // 执行SQL并返回结果
      tx.executeSql(selectSql, [], ( tx, result) => {// 成功回调
        this.tableStructureInfo.MONEY_USEINFO.MerageFrom(result);
      }, (error) => {// 失败回调
        console.log('数据库操作失败: ' + error.message);
      });
    });
  }

 

2.将数据表定义为一个类中的对象,并定义一个将查询结果转数组的MerageFrom方法

/**
 * 数据表结构信息
 */
export class TableStructureInfo {
    /**
     * MONEY_USEINFO 记账信息表
     */
    public MONEY_USEINFO: any = {
        /**
         * 表中列信息
         */
        Columns: [
            ' REC_CREATEOR'
            , 'REC_CREATE_TIME'
            , 'REC_MODIFIER'
            , 'REC_MODIFY_TIME'
            , 'SEQ_NO'
            , 'MONEY_USE_TIME'
            , 'MONEY_UST_TYPE'
            , 'AMOUNT'
            , 'MONEY_USE_DESC'
            , 'BACK1'
            , 'BACK2'
            , 'BACK3'
            , 'BACK4'
            , 'BACK5'
            , 'BACK6'
            , 'BACK7'
            , 'BACK8'
            , 'BACK9'
            , 'BACK10'],
        /**
         * 结果集
         */
        DataTable: [],
        Row: {}, // 将row定义为一个对象
        /**
         * 将查询结果转为一个数组类似DataTable
         */
        MerageFrom: (data: any) => {
            if (data.rows.length > 0) {
                let rowCount = 0;
                for (const item of data.rows) {
                    rowCount++;
                    console.log('当前为第:' + rowCount + '次循环');
                    this.MONEY_USEINFO.Row = {}; // 重置对象方便下一次循环从头开始添加对象属性
                    for (const column of this.MONEY_USEINFO.Columns) {
                        if (item[column] !== undefined && item[column] !== null) {
                            // 通过查找当前column在对象中是否存在,如果存在则直接赋值,不存在则会自动新增再赋值
                            this.MONEY_USEINFO.Row[column] =  item[column];
                        }
                    }
                    this.MONEY_USEINFO.DataTable.push( this.MONEY_USEINFO.Row ); // 直接将对象压入数组中
                }
                console.log('当前DataTable对象:', this.MONEY_USEINFO.DataTable);
            }
        }
    };
}

 

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值