mysql - 如何处理 Golang 中插入重复键的错误?

标签 mysql go go-gin

当我向数据库中插入一条记录时,它正在保存,但我的问题是在 Golang 中我无法处理错误。假设现在我在控制台中收到类似重复键的错误,但我想在 JSON 响应中处理它,我将如何处理此错误?

这是我的代码:

func main() {
    router := gin.New()
    router.Use(gin.Logger())
    router.Use(gin.Recovery())
    db, err := sql.Open("mysql", "root:password@tcp(gpstest.cksiqniek8yk.ap-south-1.rds.amazonaws.com:3306)/tech")
    if err != nil {
        fmt.Print(err.Error())
    }
    // make sure connection is available
    err = db.Ping()
    if err != nil {
        fmt.Print(err.Error())
    }
    router.POST("/validate", func(c *gin.Context) {
        var (
            cat  Cat
            cats []Cat
        )
        c.BindJSON(&cat)

        rows, err := db.Query("select a.id, r.id from admin_user as a inner join roles as r on r.id = a.id where r.name = '" + cat.roleName + "' AND a.admin_email = '" + cat.adminEmail + "' AND a.id = ' + cat.ID + ' AND r.id = ' + cat.ID1 + ' ;")
        if err != nil {
            log.Fatal(err)
        }

        if rows.Next() {
            err = rows.Scan(&cat.ID, &cat.ID1)
            cats = append(cats, cat)
            if err != nil {
                fmt.Print(err.Error())
            }
            c.JSON(http.StatusOK, gin.H{
                "result": cats,
                "count":  len(cats),
            })
        } else {
            var buffer bytes.Buffer

            stmt, err := db.Prepare("INSERT INTO admin_roles(admin_id, role_id) values(?,?)")
            if err != nil {
                panic(err)
            }
            _, err = stmt.Exec(cat.ID, cat.ID1)

            if err != nil {
                fmt.Print(err.Error())
            }
            buffer.WriteString("cat.ID")
            buffer.WriteString(" ")
            buffer.WriteString("cat.ID1")
            defer stmt.Close()
            name1 := buffer.String()
            c.JSON(http.StatusOK, gin.H{
                "message": fmt.Sprintf(" %s successfully created", name1),
            })
        }

    })
    router.Run(":4500")
    //return router
}

这是我在控制台中遇到的错误。

Error 1062: Duplicate entry '2-2' for key 'admin_id_role_id_uk_idx'[GIN]. I want to handle this error in JSON format.

最佳答案

您可以为感兴趣的列设置 UNIQUE 选项。并显示 JSON 响应 HTTP 请求的错误,只需在处理部分之前声明和初始化一个变量,并根据数据库查询的响应更改其结果。

尽管我首先更喜欢查询数据库是否输入数据已经保存在数据库中。

关于mysql - 如何处理 Golang 中插入重复键的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49746260/

相关文章:

rest - Go Gin-Gonic,从 POST 请求中获取文本

mySQL 根据值提取数字或字符串

go - 如何部署 travis 自动构建,我的失败了,我不知道如何修复

mysql - 我需要一些帮助来优化查询

go - 为什么我从这个简单的 Go 代码中得到这样的输出?

json - 检查 JSON 是对象还是数组

go - 如何在 Go 中访问请求特定数据?

go - panic : runtime error: invalid memory address or nil pointer dereference only on the GAE

php - LIKE 查询中的数字通配符?

sql - MySQL 查询问题