Golang數(shù)據(jù)庫操作增刪改查

go 連接mysql進(jìn)行數(shù)據(jù)庫操作

  • 導(dǎo)入包,導(dǎo)入github那個驅(qū)動包是因為go本地的數(shù)據(jù)庫操作需要用到那個驅(qū)動
"database/sql"
_ "database/sql/driver"
_ "github.com/go-sql-driver/mysql"
  • 下載一個navicat Premium可視化數(shù)據(jù)庫操作軟件,然后就可以創(chuàng)建數(shù)據(jù)庫名稱,用戶的賬號和密碼
  • 連接到mysql數(shù)據(jù)庫,返回一個DB指針

func connectDB() *sql.DB {
    /**
    設(shè)置最大的連接數(shù),可以避免并發(fā)太高導(dǎo)致連接mysql出現(xiàn)too many connections的錯誤。
    設(shè)置閑置的連接數(shù)則當(dāng)開啟的一個連接使用完成后可以放在池里等候下一次使用。
     */
    db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/app?charset=utf8")
    checkErr(err)
    db.SetMaxOpenConns(MaxOpenConn) //用于設(shè)置最大打開的連接數(shù),默認(rèn)值為0表示不限制。
    db.SetMaxIdleConns(MaxIdleConn) //用于設(shè)置閑置的連接數(shù)。
    db.Ping()
    return db
}
  • 創(chuàng)建表一個user表

type User struct {
    UserId int64
    UserName string
    UserPassword string
}


func createUserTable(db *sql.DB) {
    sqlStr := "CREATE TABLE IF NOT EXISTS `address` (`userId` SERIAL PRIMARY KEY,`userName` VARCHAR (20) NOT NULL,`userPassword` VARCHAR (20) NOT NULL) ENGINE = `innodb`,CHARACTER SET = utf8"
    _, err := db.Exec(sqlStr)
    checkErr(err)
}
  • 插入數(shù)據(jù)

func InsertUser(db *sql.DB, user *models.User) {
    stmt, err := db.Prepare("INSERT user SET userId=?,userName=?,userPassword=?")
    checkErr(err)
    stmt.Exec(user.UserId, user.UserName, user.UserPassword)
}
  • 查詢數(shù)據(jù),創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu)切片,并返回

func GetUserList(db *sql.DB, user *models.User) []models.User {
    stmt, _ := db.Prepare("SELECT * FROM user WHERE userId>? AND userId<?")
    rows, err := stmt.Query(1, 9)
    checkErr(err)
    s, _ := rows.Columns()
    length := len(s);
    userList := make([]models.User, length)
    for rows.Next() {
        err := rows.Scan(&user.UserId, &user.UserName, &user.UserPassword)
        checkErr(err)
        fmt.Println("password", user.UserPassword)
        fmt.Println("name", user.UserName)
        fmt.Println("id", user.UserId)
        userList = append(userList, *user)
    }
    return userList
}
  • 刪除數(shù)據(jù),并返回刪除成功數(shù)量

func DeleteUser(db *sql.DB, userId int) int64 {
    result, err := db.Exec("DELETE FROM user WHERE userId=?", userId)
    checkErr(err)
    num, err := result.RowsAffected()
    checkErr(err)
    return num
}
  • 更新數(shù)據(jù),并返回更新成功數(shù)量

func UpdateUser(db *sql.DB, args ...interface{}) int64 {
    stmt, err := db.Prepare("UPDATE user SET userName=?,userPassword=? WHERE userId=?")
    checkErr(err)
    result, err := stmt.Exec(args...)
    num, err := result.RowsAffected()
    return num
}


  • main函數(shù)

myDB:=db.InitDB()
u:=models.User{5,"q123456","w123456"}
db.InsertUser(myDB,&u)
db.GetUserList(myDB,&u)
db.DeleteUser(myDB,1)
db.UpdateUser(myDB,"國標(biāo)","wwww",5)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容