package main import ( "database/sql" "fmt" "log" "os" "sync" _ "xugu_go_driver/xugu" ) func main3() { db, err := sql.Open("xugusql", "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=15138;AUTO_COMMIT=on;CHAR_SET=UTF8") if err != nil { log.Fatal("err ", err) } // if err := db.Ping(); err != nil { // log.Fatal("err ping ", err) // } // rows, err := db.Query("select * from dual") // if err != nil { // log.Fatal(err) // } // // rows, err := db.Query("select * from test1 where id = ?;", 4) // // if err != nil { // // log.Fatal(err) // // } // var cols []string // cols, err = rows.Columns() // if err != nil { // log.Fatal(err) // } // fmt.Println("cols: ", cols) // 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\t", string(*(v.(*[]byte)))) // } // fmt.Printf("\n") // } // rows.Close() // stmt, err := db.Prepare("select * from test1 where id = ?") // if err != nil { // log.Fatal(err) // } // stmt.Exec(2) // ret, err := db.Exec("insert into test1 (id) values (9)") // if err != nil { // log.Fatal(err) // } // ret.LastInsertId() // stmt, err := db.Prepare("select * from test1 where id = ?") // if err != nil { // log.Fatal(err) // } // rows, err := stmt.Query(5) // if err != nil { // log.Fatal(err) // } // var cols []string // cols, err = rows.Columns() // if err != nil { // log.Fatal(err) // } // fmt.Println("cols: ", cols) // 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\t", string(*(v.(*[]byte)))) // } // fmt.Printf("\n") // } // rows.Close() // db.Exec("set auto_commit on;") // rows, err := db.Query("select * from gotab2;") // if err != nil { // fmt.Printf("[ERROR] %s\n", err.Error()) // return // } // column, err := rows.Columns() // if err != nil { // fmt.Printf("[ERROR] %s\n", err.Error()) // return // } // rows_value := make([]interface{}, len(column)) // for key, _ := range rows_value { // dest := make([]byte, 216) // rows_value[key] = &dest // } // for rows.Next() { // rows.Scan(rows_value...) // for _, v := range rows_value { // fmt.Printf("结果: %s\t", string(*(v.(*[]byte)))) // } // fmt.Printf("\n") // } // rows.Close() // db.Close() // 打开文件以写入 file, err := os.OpenFile("output.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644) if err != nil { log.Fatalf("无法打开文件: %v", err) } defer file.Close() // 创建一个新的日志记录器,将输出写入文件 logger := log.New(file, "", log.LstdFlags) var wg sync.WaitGroup const numGoroutines = 10000 for i := 0; i < numGoroutines; i++ { wg.Add(1) go func(i int) { defer wg.Done() processQuery(db, i, logger) }(i) } wg.Wait() fmt.Println("所有goroutine已完成") defer db.Close() } func processQuery(db *sql.DB, id int, logger *log.Logger) { fmt.Printf("goroutine %d 开始\n", id) //db.Query("select 1 from dual;") rows, err := db.Query("select * from gotab3;") if err != nil { fmt.Printf("[ERROR] %s\n", err.Error()) logger.Printf("[ERROR] %s\n", err.Error()) return } defer rows.Close() column, err := rows.Columns() if err != nil { fmt.Printf("[ERROR] %s\n", err.Error()) logger.Printf("[ERROR] %s\n", err.Error()) return } rowsValue := make([]interface{}, len(column)) for key := range rowsValue { dest := make([]byte, 100000) rowsValue[key] = &dest } for rows.Next() { err := rows.Scan(rowsValue...) if err != nil { fmt.Printf("[ERROR] %s\n", err.Error()) logger.Printf("[ERROR] %s\n", err.Error()) return } for _, v := range rowsValue { sss := []byte(*(v.(*[]byte))) v = sss } } //time.Sleep(time.Second * 100) logger.Println("goroutine %d 完成\n", id) fmt.Printf("goroutine %d 完成\n", id) } func main() { db, err := sql.Open("xugusql", "IP=10.28.20.101;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5190;AUTO_COMMIT=on;CHAR_SET=UTF8") if err != nil { log.Fatal("err ", err) } lp := LicenseProcess{ Creator: "Alice", ApplyDate: "2023-01-01", RelatedProject: "Project A", SalesPerson: "Bob", SalesEmail: "bob@example.com", TechSupport: "Charlie", TechEmail: "charlie@example.com", ProductName: "Product X", Version: "1.0", Processor: "Intel", OperatingSystem: "Linux", IP: "192.168.1.1", MAC: "00:1A:2B:3C:4D:5E", } var Ins2 = ` INSERT INTO LicenseProcess ( Creator, ApplyDate, RelatedProject, SalesPerson, SalesEmail, TechSupport, TechEmail, ProductName, Version, Processor, OperatingSystem, IP, MAC ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ` _, err = db.Exec(Ins2, lp.Creator, lp.ApplyDate, lp.RelatedProject, lp.SalesPerson, lp.SalesEmail, lp.TechSupport, lp.TechEmail, lp.ProductName, lp.Version, lp.Processor, lp.OperatingSystem, lp.IP, lp.MAC, ) if err != nil { fmt.Printf("[ERROR] %s\n", err.Error()) return } fmt.Printf("%s ... ok\n", Ins2) err = db.Close() if err != nil { fmt.Printf("[ERROR] %s\n", err.Error()) } } type LicenseProcess struct { Creator string // 创建人 ApplyDate string // 申请日期 RelatedProject string // 关联项目 SalesPerson string // 销售人员 SalesEmail string // 销售邮箱 TechSupport string // 技术人员 TechEmail string // 技术邮箱 ProductName string // 产品名称 Version string // 版本 Processor string // 处理器 OperatingSystem string // 操作系统 IP string // IP MAC string // MAC }