lob_test.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package test
  2. import (
  3. "fmt"
  4. "io"
  5. "os"
  6. "testing"
  7. )
  8. func TestCreateLob(t *testing.T) {
  9. _, err := db.Exec("CREATE TABLE gotab4 (image BLOB);")
  10. if err != nil {
  11. fmt.Printf("[ERROR] %s\n", err.Error())
  12. }
  13. }
  14. func TestInsertLob(t *testing.T) {
  15. // 打开文件
  16. file, err := os.Open("C0077.MP4")
  17. if err != nil {
  18. fmt.Println("Error opening file:", err)
  19. return
  20. }
  21. // 确保在函数结束时关闭文件
  22. defer file.Close()
  23. // 读取文件内容
  24. fileContent, err := io.ReadAll(file)
  25. if err != nil {
  26. fmt.Println("Error reading file:", err)
  27. return
  28. }
  29. _, err = db.Exec("INSERT INTO gotab4 VALUES(?);", fileContent)
  30. if err != nil {
  31. fmt.Printf("[ERROR] %s\n", err.Error())
  32. }
  33. }
  34. func TestSelecttLob(t *testing.T) {
  35. rows, err := db.Query("select * from gotab3;")
  36. if err != nil {
  37. fmt.Printf("[ERROR] %s\n", err.Error())
  38. return
  39. }
  40. column, err := rows.Columns()
  41. if err != nil {
  42. fmt.Printf("[ERROR] %s\n", err.Error())
  43. return
  44. }
  45. rows_value := make([]interface{}, len(column))
  46. for key, _ := range rows_value {
  47. dest := make([]byte, 1000000)
  48. rows_value[key] = &dest
  49. }
  50. for rows.Next() {
  51. rows.Scan(rows_value...)
  52. for _, v := range rows_value {
  53. fmt.Printf("结果: %s\t", string(*(v.(*[]byte))))
  54. }
  55. fmt.Printf("\n")
  56. }
  57. rows.Close()
  58. db.Close()
  59. }
  60. func TestSelecttLobToSave(t *testing.T) {
  61. rows, err := db.Query("select * from gotab4;")
  62. if err != nil {
  63. fmt.Printf("[ERROR] %s\n", err.Error())
  64. return
  65. }
  66. column, err := rows.Columns()
  67. if err != nil {
  68. fmt.Printf("[ERROR] %s\n", err.Error())
  69. return
  70. }
  71. rows_value := make([]interface{}, len(column))
  72. for key, _ := range rows_value {
  73. dest := make([]byte, 1000000)
  74. rows_value[key] = &dest
  75. }
  76. for rows.Next() {
  77. rows.Scan(rows_value...)
  78. for _, v := range rows_value {
  79. //fmt.Printf("结果: %s\t", string(*(v.(*[]byte))))
  80. SaveToFile(*(v.(*[]byte)), "Ct.MP4")
  81. }
  82. fmt.Printf("\n")
  83. }
  84. rows.Close()
  85. db.Close()
  86. }
  87. // SaveToFile 将字节切片保存到文件中
  88. func SaveToFile(data []byte, filename string) error {
  89. file, err := os.Create(filename)
  90. if err != nil {
  91. return err
  92. }
  93. defer file.Close()
  94. _, err = file.Write(data)
  95. if err != nil {
  96. return err
  97. }
  98. return nil
  99. }