gpt4 book ai didi

http - 尝试用DB编写时应如何处理错误

转载 作者:行者123 更新时间:2023-12-01 22:41:41 24 4
gpt4 key购买 nike

不确定在这种特殊情况下尝试写DB时应该如何处理错误:

所以我用这个功能插入数据库

func SaveToDB(dateid string, content string) {
db, err := sql.Open("mysql", dbLink)
if err != nil {
log.Fatal(err)
}

queryString := fmt.Sprintf("INSERT INTO balances (dateid, content) VALUES('%v','%v');", dateid, content)

rows, err := db.Query(queryString)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
}

但是,当重复出现错误时,我不想停止服务器,因此我尝试了以下版本:
func SaveToDB(dateid string, content string) {
db, err := sql.Open("mysql", dbLink)
if err != nil {
log.Fatal(err)
}

queryString := fmt.Sprintf("INSERT INTO balances (dateid, content) VALUES('%v','%v');", dateid, content)

rows, err1 := db.Query(queryString)
if err1 != nil {
thisErr, err2 := regexp.MatchString("Error 1062: Duplicate entry", err.Error())
if err2 != nil {
log.Fatal("ERROR: error occured while trying to perform regex on SaveToDB", err2)
}
if thisErr == true {
log.Println("ERROR: Not able to save in DB due to ducplicate: ", err1)
}else{log.Fatal("ERROR: error occured when trying to save to DB: ", err1)}
}
defer rows.Close()
}


但是在这种情况下,我会感到 panic 。那么我如何才能阻止该函数在到达“defer rows.Close()”之前执行?我想这是引起 panic 的原因。

最佳答案

拥有正确的数据后,请勿使用log.Fatal并安装延迟的代码:

rows, err := db.Query(queryString)
if err != nil {
log.Error(err)
return
}
defer rows.Close()

关于http - 尝试用DB编写时应如何处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61878331/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com