IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Golang+Vue不定数据结构返回展示 -> 正文阅读

[数据结构与算法]Golang+Vue不定数据结构返回展示

一、问题需求

需要增加一个MySQL Web页面查询的功能,后端为Go开发,前端使用Vue,由于Golang为强类型语言,但数据库查询结果字段并不确定,出现了golang返回结果和数据库实际存储数据存在差异甚至乱码的情况。

二、问题解决

基础环境

  • 数据库类型:MySQL
  • Go版本:1.13
  • Go操作数据库包:Gorm
  • 前端使用ui:element ui

后端

// 利用rows, err := db.Raw(sql).Rows()将数据查询之后,需要进行特殊处理
// 为了前端方便展示,会返回字段列表以及具体数据信息
	cols, err := rows.Columns()
	header = cols

	for rows.Next() {
		columns, err := rows.ColumnTypes()
		// err如何处理,返回哪些结果根据具体情况调整
		if err != nil {
			return 0, header, nil, err
		}

		dbtypes := make(map[string]string)

		values := make([]interface{}, len(columns))
		object := map[string]interface{}{}
		for i, column := range columns {
			v := reflect.New(column.ScanType()).Interface()
			switch v.(type) {
			case *[]uint8:
				v = new(string)
			case *sql.RawBytes:
				v = new(*string)
			case *mysql.NullTime:
				v = new(time.Time)
			default:
				// fmt.Printf("%v: %T", column.Name(), v)
			}
			object[column.Name()] = v

			values[i] = object[column.Name()]
			dbtypes[column.Name()] = column.DatabaseTypeName()
		}
		err = rows.Scan(values...)
		//fmt.Println(dbtypes)

		for i,v := range cols {
			vs, ok := values[i].(*time.Time)
			if !ok {
				continue
			}
			if dbtypes[v] == "DATE" {
				object[v] = vs.Format("2006-01-02")
			} else {
				object[v] = vs.Format("2006-01-02 15:04:05")
			}
		}
		result = append(result, object)
	}

后端返回结果示例

        "result": [
            {
                "col": null,
                "col100": null,
                "col2": null,
                "col27": null,
                "col3": "",
                "col5": null,
                "col6": "",
                "emp_no": 10101,
                "from_date": "1998-10-14",
                "iState": "",
                "id": 1000,
                "salary": 66591,
                "to_date": "1999-10-14",
                "type": ""
            },
            {
                "col": null,
                "col100": null,
                "col2": null,
                "col27": null,
                "col3": "",
                "col5": null,
                "col6": "",
                "emp_no": 10101,
                "from_date": "1999-10-14",
                "iState": "",
                "id": 1001,
                "salary": 66715,
                "to_date": "2000-09-23",
                "type": ""
            }
        ],
        "header": [
            "emp_no",
            "salary",
            "from_date",
            "to_date",
            "id",
            "type",
            "iState",
            "col",
            "col2",
            "col27",
            "col100",
            "col3",
            "col5",
            "col6"
        ]

前端对应部分

<template>
// 结果展示:header为字段信息,selectResult为查询结果列表
          <el-form-item label="查询结果:" prop="sqlSelect" :style=this.sqlSelectResult>
            <template>
              <el-table :data="selectResult" style="width: 100%" >
                <el-table-column v-for="(date, index) in header" :key="index"  :label="date" :prop="date" >
                  <template slot-scope="scope">
                    {{selectResult[scope.$index][date]}}
                  </template>
                </el-table-column>
              </el-table>
            </template>
          </el-form-item>
</template>

前端显示结果

如果字段名称过长,折行,可以参考http://www.4k8k.xyz/article/guozhangqiang/108094582,根据列名自适应表格宽度,在el-table-column中添加:width="setColumnWidth(date)即可
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:50:05  更:2022-03-04 15:51:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:23:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码