尝试在 DB 中写入时应如何处理错误

在这种特殊情况下,当我尝试在 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()

}


但在这种情况下,我会感到恐慌。那么我怎样才能在它到达“defer rows.Close()”之前阻止这个函数执行呢?我想这就是恐慌的原因...


慕桂英546537
浏览 225回答 1
1回答

MM们

log.Fatal一旦拥有正确的数据,就不要使用和安装延迟代码:rows, err := db.Query(queryString)if err != nil {    log.Error(err)    return} defer rows.Close()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go