0

我正在使用 gin 框架并尝试使用 grom 进行 crud 操作。我正在尝试从 MYSQL 数据库中获取数据。我有 db.go 来获取数据库实例,每个表和模型的一些控制器我有这样的模型

    type Campaigns struct {

        ID                     int       `json:"id" form:"id" gorm:"column:CampaignID"`
        UserID                 int       `json:"userId" form:"userId" gorm:"column:UserID"`
        Name                   string    `json:"name" form:"name" gorm:"column:Name"`
        StartDate              time.Time `json:"start" form:"start" gorm:"column:StartDate"`
        EndDate                time.Time `json:"end" form:"end" gorm:"column:EndDate"`
        Customer               string    `json:"customer" form:"customer" gorm:"column:Customer"`
        CustomerID             int       `json:"customerId" form:"customerId" gorm:"column:CustomerID"`
        ImpressionsCounter     int       `json:"ImpressionsCounter" form:"ImpressionsCounter" gorm:"column:ImpressionsCounter"`
        MaxImpressions         int       `json:"maxImpressions" form:"maxImpressions" gorm:"column:MaxImpressions"`
        CurrentSpend           float64   `json:"currentSpend" gorm:"column:CurrentSpend"`
        MaxSpend               float64   `json:"maxSpend" form:"maxSpend" gorm:"column:MaxSpend"`
        Active                 bool      `json:"active" form:"active" gorm:"column:Active"`
        Created                time.Time `json:"created" gorm:"column:DateCreated"`
        Updated                time.Time `json:"updated" gorm:"column:DateCreated"`
}

这是我正在使用的一个控制器

    package controllers
import (
    "time"

  "github.com/op/go-logging"
    "github.com/gin-gonic/gin"
    "github.com/jinzhu/gorm"
  _ "github.com/go-sql-driver/mysql"

    "../models"
)

var log = logging.MustGetLogger("AsAPI")

type AsController struct {
    DB gorm.DB
}

func (ac *AsController) SetDB(d gorm.DB) {
    ac.DB = d
    ac.DB.LogMode(true)
}


// Get all table
func (ac *AsController) ListTable(c *gin.Context) {

    var results []models.Campaigns
  err := ac.DB.Find(&results)

    if err != nil {
        log.Debugf("Error when looking up Table, the error is '%v'", err)
        res := gin.H{
                "status": "404",
                "error": "No Table found",
        }
        c.JSON(404, res)
        return
    }
    content := gin.H{
                        "status": "200",
            "result": "Success",
            "Table": results,
        }

  c.Writer.Header().Set("Content-Type", "application/json")
  c.JSON(200, content)
}

要获得我正在使用的数据库连接

package controllers
import (
    "time"

  "github.com/op/go-logging"
    "github.com/gin-gonic/gin"
    "github.com/jinzhu/gorm"
  _ "github.com/go-sql-driver/mysql"

    "../models"
)

var log = logging.MustGetLogger("AdsAPI")

type AsController struct {
    DB gorm.DB
}

func (ac *AsController) SetDB(d gorm.DB) {
    ac.DB = d
    ac.DB.LogMode(true)
} 

我正在使用以下路线

ac := controllers.AdsController{}
ac.SetDB(dc.GetDB())


// Get a Ads resource
router := gin.Default()

router.GET("/table", ac.ListTables)

当我运行它时,我收到以下错误

(/api/controllers/table.go:30) 
[2016-03-23 09:56:39]  [0.99ms]  SELECT  * FROM `tables`  
2016/03/23 09:56:39 Error when looking up tables, the error is '&{0xc8202140e0 sql: Scan error on column index 3: unsupported driver -> Scan pair: []uint8 -> *time.Time 1 <nil> 0xc82022f860 0xc82022f7c0 0xc82021e140 2 {0xc8201fb4a0} <nil> false  map[] map[]}'
[GIN] 2016/03/23 - 09:56:39 | 404 |    1.153811ms | 127.0.0.1 |   GET     /table

这个错误的原因是什么?帮我解决这个错误?

4

2 回答 2

1

您可以在驱动程序文档https://github.com/go-sql-driver/mysql#timetime-support中找到答案 :

MySQL DATE 和 DATETIME 值的默认内部输出类型是 []byte,它允许您将值扫描到程序中的 []byte、字符串或 sql.RawBytes 变量中。

但是,许多人希望将 MySQL 的 DATE 和 DATETIME 值扫描到 time.Time 变量中,这与 MySQL 中的 Go to DATE 和 DATETIME 的逻辑相反。您可以通过使用 DSN 参数 parseTime=true 将内部输出类型从 []byte 更改为 time.Time 来实现。您可以使用 loc DSN 参数设置默认 time.Time 位置。

或者,您可以使用 NullTime 类型作为扫描目标,它适用于 time.Time 和 string / []byte。

于 2016-03-23T07:48:33.283 回答
-3

你真的在这里打开过数据库吗?我根本看不到真正的 Open() 调用......

于 2016-03-31T19:22:07.477 回答