当我向数据库中插入一条记录时,它正在保存,但我的问题是在 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/