main.go 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "log"
  6. "os"
  7. "sync"
  8. _ "xugu_go_driver/xugu"
  9. )
  10. func main3() {
  11. db, err := sql.Open("xugusql", "IP=192.168.2.216;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=15138;AUTO_COMMIT=on;CHAR_SET=UTF8")
  12. if err != nil {
  13. log.Fatal("err ", err)
  14. }
  15. // if err := db.Ping(); err != nil {
  16. // log.Fatal("err ping ", err)
  17. // }
  18. // rows, err := db.Query("select * from dual")
  19. // if err != nil {
  20. // log.Fatal(err)
  21. // }
  22. // // rows, err := db.Query("select * from test1 where id = ?;", 4)
  23. // // if err != nil {
  24. // // log.Fatal(err)
  25. // // }
  26. // var cols []string
  27. // cols, err = rows.Columns()
  28. // if err != nil {
  29. // log.Fatal(err)
  30. // }
  31. // fmt.Println("cols: ", cols)
  32. // pvals := make([]interface{}, len(cols))
  33. // for key, _ := range pvals {
  34. // dest := make([]byte, 216)
  35. // pvals[key] = &dest
  36. // } /* end for */
  37. // for rows.Next() {
  38. // err = rows.Scan(pvals...)
  39. // if err != nil {
  40. // log.Fatal(err)
  41. // }
  42. // for _, v := range pvals {
  43. // fmt.Printf("输出 %s\t", string(*(v.(*[]byte))))
  44. // }
  45. // fmt.Printf("\n")
  46. // }
  47. // rows.Close()
  48. // stmt, err := db.Prepare("select * from test1 where id = ?")
  49. // if err != nil {
  50. // log.Fatal(err)
  51. // }
  52. // stmt.Exec(2)
  53. // ret, err := db.Exec("insert into test1 (id) values (9)")
  54. // if err != nil {
  55. // log.Fatal(err)
  56. // }
  57. // ret.LastInsertId()
  58. // stmt, err := db.Prepare("select * from test1 where id = ?")
  59. // if err != nil {
  60. // log.Fatal(err)
  61. // }
  62. // rows, err := stmt.Query(5)
  63. // if err != nil {
  64. // log.Fatal(err)
  65. // }
  66. // var cols []string
  67. // cols, err = rows.Columns()
  68. // if err != nil {
  69. // log.Fatal(err)
  70. // }
  71. // fmt.Println("cols: ", cols)
  72. // pvals := make([]interface{}, len(cols))
  73. // for key, _ := range pvals {
  74. // dest := make([]byte, 216)
  75. // pvals[key] = &dest
  76. // } /* end for */
  77. // for rows.Next() {
  78. // err = rows.Scan(pvals...)
  79. // if err != nil {
  80. // log.Fatal(err)
  81. // }
  82. // for _, v := range pvals {
  83. // fmt.Printf("输出 %s\t", string(*(v.(*[]byte))))
  84. // }
  85. // fmt.Printf("\n")
  86. // }
  87. // rows.Close()
  88. // db.Exec("set auto_commit on;")
  89. // rows, err := db.Query("select * from gotab2;")
  90. // if err != nil {
  91. // fmt.Printf("[ERROR] %s\n", err.Error())
  92. // return
  93. // }
  94. // column, err := rows.Columns()
  95. // if err != nil {
  96. // fmt.Printf("[ERROR] %s\n", err.Error())
  97. // return
  98. // }
  99. // rows_value := make([]interface{}, len(column))
  100. // for key, _ := range rows_value {
  101. // dest := make([]byte, 216)
  102. // rows_value[key] = &dest
  103. // }
  104. // for rows.Next() {
  105. // rows.Scan(rows_value...)
  106. // for _, v := range rows_value {
  107. // fmt.Printf("结果: %s\t", string(*(v.(*[]byte))))
  108. // }
  109. // fmt.Printf("\n")
  110. // }
  111. // rows.Close()
  112. // db.Close()
  113. // 打开文件以写入
  114. file, err := os.OpenFile("output.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
  115. if err != nil {
  116. log.Fatalf("无法打开文件: %v", err)
  117. }
  118. defer file.Close()
  119. // 创建一个新的日志记录器,将输出写入文件
  120. logger := log.New(file, "", log.LstdFlags)
  121. var wg sync.WaitGroup
  122. const numGoroutines = 10000
  123. for i := 0; i < numGoroutines; i++ {
  124. wg.Add(1)
  125. go func(i int) {
  126. defer wg.Done()
  127. processQuery(db, i, logger)
  128. }(i)
  129. }
  130. wg.Wait()
  131. fmt.Println("所有goroutine已完成")
  132. defer db.Close()
  133. }
  134. func processQuery(db *sql.DB, id int, logger *log.Logger) {
  135. fmt.Printf("goroutine %d 开始\n", id)
  136. //db.Query("select 1 from dual;")
  137. rows, err := db.Query("select * from gotab3;")
  138. if err != nil {
  139. fmt.Printf("[ERROR] %s\n", err.Error())
  140. logger.Printf("[ERROR] %s\n", err.Error())
  141. return
  142. }
  143. defer rows.Close()
  144. column, err := rows.Columns()
  145. if err != nil {
  146. fmt.Printf("[ERROR] %s\n", err.Error())
  147. logger.Printf("[ERROR] %s\n", err.Error())
  148. return
  149. }
  150. rowsValue := make([]interface{}, len(column))
  151. for key := range rowsValue {
  152. dest := make([]byte, 100000)
  153. rowsValue[key] = &dest
  154. }
  155. for rows.Next() {
  156. err := rows.Scan(rowsValue...)
  157. if err != nil {
  158. fmt.Printf("[ERROR] %s\n", err.Error())
  159. logger.Printf("[ERROR] %s\n", err.Error())
  160. return
  161. }
  162. for _, v := range rowsValue {
  163. sss := []byte(*(v.(*[]byte)))
  164. v = sss
  165. }
  166. }
  167. //time.Sleep(time.Second * 100)
  168. logger.Println("goroutine %d 完成\n", id)
  169. fmt.Printf("goroutine %d 完成\n", id)
  170. }
  171. func main() {
  172. db, err := sql.Open("xugusql", "IP=10.28.20.101;DB=SYSTEM;User=SYSDBA;PWD=SYSDBA;Port=5190;AUTO_COMMIT=on;CHAR_SET=UTF8")
  173. if err != nil {
  174. log.Fatal("err ", err)
  175. }
  176. lp := LicenseProcess{
  177. Creator: "Alice",
  178. ApplyDate: "2023-01-01",
  179. RelatedProject: "Project A",
  180. SalesPerson: "Bob",
  181. SalesEmail: "bob@example.com",
  182. TechSupport: "Charlie",
  183. TechEmail: "charlie@example.com",
  184. ProductName: "Product X",
  185. Version: "1.0",
  186. Processor: "Intel",
  187. OperatingSystem: "Linux",
  188. IP: "192.168.1.1",
  189. MAC: "00:1A:2B:3C:4D:5E",
  190. }
  191. var Ins2 = `
  192. INSERT INTO LicenseProcess (
  193. Creator, ApplyDate, RelatedProject, SalesPerson, SalesEmail, TechSupport, TechEmail,
  194. ProductName, Version, Processor, OperatingSystem, IP, MAC
  195. ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
  196. `
  197. _, err = db.Exec(Ins2,
  198. lp.Creator, lp.ApplyDate, lp.RelatedProject, lp.SalesPerson, lp.SalesEmail, lp.TechSupport, lp.TechEmail,
  199. lp.ProductName, lp.Version, lp.Processor, lp.OperatingSystem, lp.IP, lp.MAC,
  200. )
  201. if err != nil {
  202. fmt.Printf("[ERROR] %s\n", err.Error())
  203. return
  204. }
  205. fmt.Printf("%s ... ok\n", Ins2)
  206. err = db.Close()
  207. if err != nil {
  208. fmt.Printf("[ERROR] %s\n", err.Error())
  209. }
  210. }
  211. type LicenseProcess struct {
  212. Creator string // 创建人
  213. ApplyDate string // 申请日期
  214. RelatedProject string // 关联项目
  215. SalesPerson string // 销售人员
  216. SalesEmail string // 销售邮箱
  217. TechSupport string // 技术人员
  218. TechEmail string // 技术邮箱
  219. ProductName string // 产品名称
  220. Version string // 版本
  221. Processor string // 处理器
  222. OperatingSystem string // 操作系统
  223. IP string // IP
  224. MAC string // MAC
  225. }