db.go 3.6 KB

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