go语言:数据库sql查询保存任意数量字段的数据

1、查询任意列数的表,并输出

Go 复制代码
func search() {
	rows, _ := db.Query("select * from users") // 查询数据
	columns, _ := rows.Columns()               // 查询到的字段名列表
	values := make([]any, len(columns))        // 根据字段数量,创建接收字段值的列表
	for i := range columns {                   // 根据字段数量初始化字段值
		values[i] = new(sql.RawBytes) // 定义值类型为 sql.RawBytes
		fmt.Print(columns[i], "  ")   // 打印字段名
	}
	fmt.Println()     // 换行
	for rows.Next() { // 循环多行数据
		rows.Scan(values...)       // 将一行数据赋值
		for _, d := range values { // 取出一行数据
			dd, _ := d.(*sql.RawBytes)   // 将任意类型数据转换为sql.RawBytes地址
			fmt.Print(string(*dd), "  ") // 将sql.RawBytes的地址转换为字符串
		}
		fmt.Println()
	}
}

2、根据输入的sql查找字符串,输出字段名列表、每行数据列表

Go 复制代码
func search1(sqlstr string) ([]string, [][]string) {
	var fields []string                 // 存储字段名
	var datas [][]string                // 存储所有数据行
	var data []string                   // 临时存储单行数据
	rows, _ := db.Query(sqlstr)         // 查询数据
	columns, _ := rows.Columns()        // 查询到的字段名列表
	values := make([]any, len(columns)) // 根据字段数量,创建接收字段值的列表
	for i := range columns {            // 根据字段数量初始化字段值
		values[i] = new(sql.RawBytes)       // 定义值类型为 sql.RawBytes
		fields = append(fields, columns[i]) // 存储字段名
	}
	for rows.Next() { // 循环多行数据
		rows.Scan(values...)       // 将一行数据赋值
		for _, d := range values { // 取出一行数据
			dd, _ := d.(*sql.RawBytes)       // 将任意类型数据转换为sql.RawBytes地址
			data = append(data, string(*dd)) // 存储单行数据
		}
		datas = append(datas, data) // 将单行数据添加到数据列表
		data = []string{}           // 单行数据清零
	}
	return fields, datas            // 返回字段值列表、每行数据列表
}
相关推荐
何以解忧,唯有..15 小时前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
BD_Marathon17 小时前
SQL学习指南——视图
数据库·sql
2601_9620725517 小时前
李梦娇常识4600问|题库|打印版
sql·华为od·华为·c#·华为云·.net·harmonyos
踏着七彩祥云的小丑18 小时前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
HackTwoHub19 小时前
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
数据库·人工智能·sql·web安全·网络安全·自动化·系统安全
JCGKS19 小时前
Go `init` 函数:包初始化顺序到底是怎样的
golang·init·init执行顺序
Volunteer Technology20 小时前
Flink Table API与SQL(一)
大数据·sql·flink
何以解忧,唯有..20 小时前
Go语言中的const:常量声明与iota枚举详解
java·开发语言·golang
持敬chijing21 小时前
Web渗透之SQL注入-常用sql语句
sql·安全·web安全·网络安全
Theo·Chan21 小时前
更换 Kingbase V9 License 踩坑记
sql·信创·kingbase