123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- package main
- import (
- "database/sql"
- "fmt"
- "log"
- "os"
- "sync"
- "time"
- _ "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)
- }
- type userInfo struct {
- Id int
- Username string
- Password string
- Power sql.NullByte
- }
- type LicenseApplication struct {
- Creator string // 创建人
- ApplicationDate string //申请日期
- AssociatedProject string // 关联项目
- SalesPerson string //销售人员
- SalesEmail string // 销售接收邮箱
- SupportPerson string //技服人员
- SupportEmail string // 技服接收邮箱
- TotalNodes string //总节点数
- Company string //使用单位
- ProductName string // 产品名称
- Version string //版本
- NodeCount string //节点数
- Processor string //处理器
- OperatingSystem string //操作系统
- MasterMacAddress string // 主MasterMac地址
- SecondaryMasterMacAddress string // 副MasterMac地址
- }
- type LicenseInfo struct {
- ID int `json:"id"`
- UserID int `json:"user_id"`
- UpUser string `json:"up_user"`
- UpTime sql.NullTime `json:"up_time"`
- DelTime sql.NullTime `json:"del_time"`
- License1 string
- License2 string
- LicenseFlage string
- UniqueID string
- LicenseApplication
- }
- func main() {
- db, err := sql.Open("xugusql", "IP=127.0.0.1;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5138;AUTO_COMMIT=on;CHAR_SET=UTF8")
- if err != nil {
- log.Fatal("err ", err)
- }
- query := fmt.Sprintf(`
- SELECT la.*,li.lic1, li.lic2
- FROM LicenseApplication la
- JOIN licenseRecord lr ON la.UniqueID = lr.LicenseUniqueID
- JOIN LicenseInfo li ON la.UniqueID = li.LicenseApplicationUniqueID
- WHERE lr.USERS LIKE '%%%s%%'
- LIMIT ? OFFSET ?`, "test3")
- rows, err := db.Query(query, 10, 0)
- if err != nil {
- fmt.Println("query data: %v", err)
- //return nil, 0, fmt.Errorf("query error: %v", err)
- }
- defer rows.Close()
- var results []LicenseInfo
- for rows.Next() {
- var li LicenseInfo
- err = rows.Scan(
- &li.ID,
- &li.UniqueID,
- &li.UserID,
- &li.UpUser,
- &li.UpTime,
- &li.DelTime,
- &li.LicenseApplication.Creator,
- &li.LicenseApplication.ApplicationDate,
- &li.LicenseApplication.AssociatedProject,
- &li.LicenseApplication.SalesPerson,
- &li.LicenseApplication.SalesEmail,
- &li.LicenseApplication.SupportPerson,
- &li.LicenseApplication.SupportEmail,
- &li.LicenseApplication.TotalNodes,
- &li.LicenseApplication.Company,
- &li.LicenseApplication.ProductName,
- &li.LicenseApplication.Version,
- &li.LicenseApplication.NodeCount,
- &li.LicenseApplication.Processor,
- &li.LicenseApplication.OperatingSystem,
- &li.LicenseApplication.MasterMacAddress,
- &li.LicenseApplication.SecondaryMasterMacAddress,
- &li.License1,
- &li.License2,
- )
- if err != nil {
- fmt.Println("scan row: %v", err)
- // return nil, fmt.Errorf("scan row: %v", err)
- //return nil, 0, fmt.Errorf("scan row error: %v", err)
- }
- results = append(results, li)
- }
- if err = rows.Err(); err != nil {
- //return nil, 0, fmt.Errorf("rows error: %v", err)
- }
- fmt.Printf("results123 %#v", results)
- db.SetConnMaxLifetime(time.Minute * 3)
- }
|