一. 配置mysql驱动包
second_projectgo mod init second_projectgo get github.com/go-sql-driver/mysql"github.com/go-sql-driver/mysql"
二. 前置操作
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"time"
)
var(
// 1. 打开连接
db, err = sql.Open("mysql", "root:123456@tcp(47.93.53.196:3306)/godatabase?charset=utf8")
)
func checkErr(err error, errMsg string) {
if err != nil {
fmt.Println(errMsg)
return
}
}
三. 增加数据操作
/**
增加数据的操作
*/
func increate() {
// 打开数据库必须的操作
db.Ping()
if err != nil {
fmt.Println("数据库连接失败")
return
}
defer func() {
if db != nil {
db.Close()
}
}()
// 2. 预处理sql语句
stmt, err := db.Prepare("insert into people values(default, ?, ?)")
defer func() {
if stmt != nil {
stmt.Close()
}
}()
if err != nil {
fmt.Println("处理失败")
return
}
//参数和占位符对应
r, err := stmt.Exec("张三", "海淀")
if err != nil {
fmt.Println(err)
fmt.Println("sql失败")
return
}
// 获取结果
count, err :=r.RowsAffected()
if err != nil {
fmt.Println("结果获取失败")
return
}
if count > 0{
fmt.Println("新增成功")
}else {
fmt.Println("新增失败")
}
id, _ := r.LastInsertId()
fmt.Println(id)
}
四. 更新数据操作
/**
更新数据库的操作
*/
func update() {
// 打开数据库必须的操作
db.Ping()
if err != nil {
fmt.Println("数据库连接失败")
return
}
defer func() {
if db != nil {
db.Close()
}
}()
// 2. 预处理sql语句
stmt, err := db.Prepare("update people set name=?,address=? where id=?")
defer func() {
if stmt != nil {
stmt.Close()
}
}()
if err != nil {
fmt.Println("处理失败")
return
}
//参数和占位符对应
r, err := stmt.Exec("张三", "朝阳", 3)
if err != nil {
fmt.Println(err)
fmt.Println("sql执行失败")
return
}
// 获取结果
count, err :=r.RowsAffected()
checkErr(err, "结果获取失败")
if count > 0{
fmt.Println("更新成功")
}else {
fmt.Println("更新失败")
}
}
五. 删除操作
/**
删除数据操作
*/
func delete() {
db.Ping()
if err != nil {
fmt.Println("数据库连接失败")
}
defer func() {
if db != nil {
db.Close()
}
}()
stmt, err := db.Prepare("delete from people where id = ?")
if err != nil {
fmt.Println("预处理sql失败")
return
}
defer func() {
if stmt != nil{
stmt.Close()
}
}()
r, err := stmt.Exec(1)
if err != nil {
fmt.Println("执行sql失败")
return
}
count, err := r.RowsAffected()
if count > 0 {
fmt.Println("删除成功")
}else{
fmt.Println("删除失败")
}
}
六. 查询数据操作
6.1 查询一部分数据
/**
查询数据库的一部分数据
*/
func SelectSomeData(name1 string) {
checkErr(err, "数据库连接失败")
defer func() {
if db != nil {
db.Close()
}
}()
stmt, err := db.Prepare("select * from people where name = ?")
checkErr(err, "预处理失败")
defer func() {
if stmt != nil{
stmt.Close()
}
}()
var (
id int
name string
address string
)
rows := stmt.QueryRow(name1)
rows.Scan(&id, &name, &address)
fmt.Println(id, name, address)
}
6.2 查询全部数据
/**
查询数据库的全部数据
*/
func SelectAllData() {
checkErr(err, "数据库连接失败")
defer func() {
if db != nil {
db.Close()
}
}()
stmt, err := db.Prepare("select * from people")
checkErr(err, "预处理失败")
defer func() {
if stmt != nil{
stmt.Close()
}
}()
rows, err := stmt.Query()
checkErr(err, "查询出错")
defer func() {
if rows != nil{
rows.Close()
}
}()
for rows.Next() {
var id int
var name string
var address string
rows.Scan(&id, &name, &address)
fmt.Println(id, name, address)
}
}