go 連接mysql進行數(shù)據(jù)庫操作
- 導入包,導入github那個驅動包是因為go本地的數(shù)據(jù)庫操作需要用到那個驅動
"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ù)呐伞,可以避免并發(fā)太高導致連接mysql出現(xiàn)too many connections的錯誤敌卓。
設置閑置的連接數(shù)則當開啟的一個連接使用完成后可以放在池里等候下一次使用。
*/
db, err := sql.Open("mysql", "root:123456@tcp(localhost:3306)/app?charset=utf8")
checkErr(err)
db.SetMaxOpenConns(MaxOpenConn) //用于設置最大打開的連接數(shù)伶氢,默認值為0表示不限制趟径。
db.SetMaxIdleConns(MaxIdleConn) //用于設置閑置的連接數(shù)。
db.Ping()
return db
}
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)
}
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ù)結構切片,并返回
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
}
myDB:=db.InitDB()
u:=models.User{5,"q123456","w123456"}
db.InsertUser(myDB,&u)
db.GetUserList(myDB,&u)
db.DeleteUser(myDB,1)
db.UpdateUser(myDB,"國標","wwww",5)