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 // 返回字段值列表、每行数据列表
}