Keine Beschreibung
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

mysql_test.go 2.0KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "testing"
  6. "git.x2erp.com/qdy/go-db/factory/database"
  7. )
  8. func TestNamedParamsQuery(t *testing.T) {
  9. factory, err := database.GetDBFactory()
  10. if err != nil {
  11. t.Fatalf("Failed to get DB factory: %v", err)
  12. }
  13. defer factory.Close()
  14. // 简化的SQL,只测试3个参数
  15. sql := `
  16. SELECT * FROM (
  17. SELECT a.*, ROWNUM rn FROM (
  18. SELECT CLOTHING_ID, CLOTHING_NAME
  19. FROM X6_STOCK_DEV.A3_CLOTHING
  20. ORDER BY CLOTHING_ID
  21. ) a WHERE ROWNUM <= :1
  22. ) WHERE rn > :2
  23. `
  24. // // 3个参数
  25. params := []interface{}{
  26. 10,
  27. 0,
  28. }
  29. db := factory.GetDB()
  30. rows, err := db.Query(sql, params...) // 获取行结果集
  31. if err != nil {
  32. log.Fatalf("查询失败: %v", err)
  33. }
  34. defer rows.Close()
  35. // 1. 获取列信息
  36. columns, err := rows.Columns()
  37. if err != nil {
  38. log.Fatalf("获取列失败: %v", err)
  39. }
  40. // 2. 准备存储结果的切片
  41. var results []map[string]interface{}
  42. // 3. 遍历每一行
  43. for rows.Next() {
  44. // 创建值的切片(每个列一个值)
  45. values := make([]interface{}, len(columns))
  46. valuePtrs := make([]interface{}, len(columns))
  47. for i := range values {
  48. valuePtrs[i] = &values[i]
  49. }
  50. // 扫描行数据
  51. err := rows.Scan(valuePtrs...)
  52. if err != nil {
  53. log.Fatalf("扫描行失败: %v", err)
  54. }
  55. // 将当前行转换为 map
  56. rowMap := make(map[string]interface{})
  57. for i, col := range columns {
  58. val := values[i]
  59. // 处理特殊类型(如 []byte 转换为 string)
  60. if b, ok := val.([]byte); ok {
  61. rowMap[col] = string(b)
  62. } else {
  63. rowMap[col] = val
  64. }
  65. }
  66. results = append(results, rowMap)
  67. }
  68. // 检查遍历过程中的错误
  69. if err = rows.Err(); err != nil {
  70. log.Fatalf("遍历行错误: %v", err)
  71. }
  72. // 4. 现在可以序列化为 JSON
  73. reqJSON1, err := json.MarshalIndent(results, "", " ")
  74. if err != nil {
  75. log.Fatalf("JSON序列化失败: %v", err)
  76. }
  77. log.Printf("查询结果:\n%s", string(reqJSON1))
  78. log.Printf("共 %d 行数据", len(results))
  79. }