db.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. package dbBase
  2. import (
  3. "C"
  4. "database/sql"
  5. "fmt"
  6. "log"
  7. "os"
  8. "strings"
  9. _ "xgAutoTest/pkg/go-driver-xugusql"
  10. )
  11. import "time"
  12. var db *sql.DB
  13. func InitDb(ip string, port string, dbBase string, user string, pwd string) {
  14. var err error
  15. dbLink := fmt.Sprintf("IP=%s;DB=%s;User=%s;"+"PWD=%s;Port=%s;AUTO_COMMIT=on;CHAR_SET=UTF8", ip, dbBase, user, pwd, port)
  16. db, err = sql.Open("xugusql", dbLink)
  17. if err != nil {
  18. log.Fatal("db open fail")
  19. }
  20. err = db.Ping()
  21. if err != nil {
  22. log.Fatal("db Ping fail")
  23. } else {
  24. log.Printf("db Ping ok")
  25. }
  26. }
  27. func GetDb() *sql.DB {
  28. return db
  29. }
  30. func QueryString(db *sql.DB, sql string) string {
  31. fmt.Println("执行查询sql: ", sql)
  32. // 记录开始时间
  33. start := time.Now()
  34. rows, err := db.Query(sql)
  35. if err != nil {
  36. log.Fatal(err)
  37. }
  38. var cols []string
  39. cols, err = rows.Columns()
  40. if err != nil {
  41. log.Fatal(err)
  42. }
  43. var sqlResult string
  44. sqlResult += fmt.Sprintf("SQL> %s", sql+"\n\n")
  45. pvals := make([]interface{}, len(cols))
  46. for key, _ := range pvals {
  47. dest := make([]byte, 216)
  48. pvals[key] = &dest
  49. } /* end for */
  50. for _, v := range cols {
  51. //fmt.Printf("%s | ", v)
  52. sqlResult += fmt.Sprintf("%s | ", v)
  53. }
  54. sqlResult += "\n------------------------------------------------------------------------------\n"
  55. records := 0
  56. for rows.Next() {
  57. err = rows.Scan(pvals...)
  58. if err != nil {
  59. log.Fatal(err)
  60. }
  61. for _, v := range pvals {
  62. if string(*(v.(*[]byte))) == "" {
  63. // fmt.Printf("%s| ", "<NULL>")
  64. sqlResult += fmt.Sprintf("%s | ", "<NULL>")
  65. } else {
  66. // fmt.Printf("%s | ", string(*(v.(*[]byte))))
  67. sqlResult += fmt.Sprintf("%s | ", string(*(v.(*[]byte))))
  68. }
  69. }
  70. records++
  71. //fmt.Printf("\n")
  72. sqlResult += "\n"
  73. }
  74. //fmt.Println("--------------------------------")
  75. // 记录结束时间
  76. end := time.Now()
  77. // 计算操作耗时
  78. duration := end.Sub(start)
  79. durationInt := int64(duration.Milliseconds())
  80. if durationInt == 0 {
  81. durationInt = 1
  82. }
  83. rows.Close()
  84. sqlResult += fmt.Sprintf("\nTotal %d records.\n", records)
  85. sqlResult += fmt.Sprintf("\nUse time:%d ms.", durationInt)
  86. //fmt.Println("sqlResult:", sqlResult)
  87. return sqlResult
  88. }
  89. func ExecString(db *sql.DB, sql string) string {
  90. fmt.Println("执行插入sql: ", sql)
  91. var sqlResult string
  92. start := time.Now()
  93. result, err := db.Exec(sql)
  94. if err != nil {
  95. log.Fatal("Exe查询错误", err)
  96. }
  97. // 记录结束时间
  98. end := time.Now()
  99. // 计算操作耗时
  100. duration := end.Sub(start)
  101. sqlResult += fmt.Sprintf("SQL> %s", sql+"\n\n")
  102. // 获取影响的行数
  103. rowsAffected, err := result.RowsAffected()
  104. if err != nil {
  105. log.Fatal(err)
  106. }
  107. //fmt.Printf("Rows affected: %d\n", rowsAffected)
  108. durationInt := int64(duration.Milliseconds())
  109. if durationInt == 0 {
  110. durationInt = 1
  111. }
  112. sqlResult += fmt.Sprintf("Total %d records effected.", rowsAffected)
  113. sqlResult += fmt.Sprintf("\nUse time:%d ms.", durationInt)
  114. //fmt.Println("sqlResult", sqlResult)
  115. return sqlResult
  116. }
  117. func ExecPrepareString(db1 *sql.DB, sql string, fileLocal []string) {
  118. //var sqlResult string
  119. fmt.Println("fileLocal的数量: ", len(fileLocal))
  120. var args []interface{}
  121. for _, v := range fileLocal {
  122. // 读取图像文件
  123. v := strings.ReplaceAll(v, " ", "")
  124. fmt.Println("文件地址:", v)
  125. imageData, err := os.ReadFile(v)
  126. if err != nil {
  127. log.Fatal(err)
  128. }
  129. args = append(args, &imageData)
  130. }
  131. fmt.Println("sql查询:", sql)
  132. stmt, err := db.Prepare(sql)
  133. if err != nil {
  134. log.Fatal(err)
  135. }
  136. _, err = stmt.Exec(args...)
  137. if err != nil {
  138. log.Fatal(err)
  139. }
  140. // // 获取影响的行数
  141. // rowsAffected, err := result.RowsAffected()
  142. // if err != nil {
  143. // log.Fatal(err)
  144. // }
  145. // sqlResult += fmt.Sprintf("Total %d records effected.", rowsAffected)
  146. // sqlResult += fmt.Sprintf("\nUse time:1 ms.")
  147. // return sqlResult
  148. }