123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- 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
- }
|