package dbBase import ( "database/sql" "fmt" "log" _ "xg_data_generate/pkg/go-driver-xugusql" ) type TableInfo struct { filedName []string filedType []string filedLen []int filedDec []int } func GetDbLink(ip string, port string, dbBase string, user string, pwd string) *sql.DB { var db *sql.DB var err error dbLink := fmt.Sprintf("IP=%s;DB=%s;User=%s;"+"PWD=%s;Port=%s;AUTO_COMMIT=on;CHAR_SET=UTF8", ip, dbBase, user, pwd, port) db, err = sql.Open("xugusql", dbLink) if err != nil { log.Fatal("db open fail") } err = db.Ping() if err != nil { log.Fatal("db Ping fail") } else { log.Printf("db Ping ok") } return db } func GetAllTables(db *sql.DB, sql string) ([]string, error) { } func QueryFieldType(db *sql.DB, sql string) error { tableInfo := []TableInfo{} rows, err := db.Query(sql) if err != nil { log.Fatal(err) } var cols []string cols, err = rows.Columns() if err != nil { log.Fatal(err) } colsType, err := rows.ColumnTypes() if err != nil { log.Fatal(err) } fmt.Println("cols Name:", cols) // 打印每个列的信息 for _, col := range colsType { // 获取列的扫描类型 /*ScanType() reflect.Type 返回 Go 语言中的类型,用于扫描数据库值到该列。用于确定该列的数据应被扫描到什么类型的 Go 变量。*/ scanType := col.ScanType() fmt.Println("Scan Type:", scanType) tableInfo = append(tableInfo, TableInfo{ filedName: []string{col.Name()}, filedType: []string{col.DatabaseTypeName()}, }) } fmt.Println("tableInfo:", tableInfo) // var sqlResult string // pvals := make([]interface{}, len(cols)) // for key, _ := range pvals { // dest := make([]byte, 216) // pvals[key] = &dest // } /* end for */ // for rows.Next() { // err = rows.Scan(pvals...) // if err != nil { // log.Fatal(err) // } // for _, v := range pvals { // // fmt.Printf("%s | ", string(*(v.(*[]byte)))) // sqlResult += fmt.Sprintf("%s", string(*(v.(*[]byte)))) // } // } rows.Close() return nil }