package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
)
// 定义表字段
type user struct {
id int
name string
age int
}
var db *sql.DB
// 初始化函数
func initDB() (err error) {
dsn := "root:(122.51.115.136:3306)/sql_test"
// 初始化不能使用 := 因为要使用全局定义的db
db, err = sql.Open("mysql", dsn)
if err != nil {
return
}
err = db.Ping()
if err != nil {
return
}
// 设置数据库最大连接数
db.SetMaxOpenConns(10)
// 设置最大空闲连接数
db.SetMaxIdleConns(5)
return
}
// 查询单行A
func queryOne(n int) {
// initDB()
var u1 user
sqlStr := `select id,name,age from user where id=?`
db.QueryRow(sqlStr, n).Scan(&u1.id, &u1.name, &u1.age)
fmt.Println(u1)
}
// 查询多行
func queryMore(n int) {
// initDB()
sqlStr := `select id,name,age from user where id > ?`
rowsObj, err := db.Query(sqlStr, n)
if err != nil {
fmt.Printf("exec %s query failed,err:%v", sqlStr, err)
return
}
defer rowsObj.Close()
for rowsObj.Next() {
var u user
err := rowsObj.Scan(&u.id, &u.name, &u.age)
if err != nil {
fmt.Printf("scan failed, err:%v\n", err)
}
fmt.Println(u)
}
}
// 插入数据
func insert() {
sqlStr := `insert into user(name,age) values("李阳",31)`
// 执行语句A
ret, err := db.Exec(sqlStr)
if err != nil {
fmt.Printf("insert failed,err:%v\n", err)
return
}
// 如果插入数据的操作,能够拿到插入的id
id, err := ret.LastInsertId()
if err != nil {
fmt.Printf("get id failed,err:%v\n", err)
}
fmt.Println("id:", id)
}
// 更新数据
func updateRow(newAge int, id int) {
sqlStr := `update user set age=? where id=?`
ret, err := db.Exec(sqlStr, newAge, id)
if err != nil {
fmt.Printf("update failed,err:%v\n", err)
return
}
// 操作影响的行数
n, err := ret.RowsAffected()
if err != nil {
fmt.Printf("get id failed, err:%v\n", err)
return
}A
fmt.Printf("更新了%d行数据\n", n)
}
// 删除数据
func deleteRow(id int) {
sqlStr := `delete from user where id=?`
ret, err := db.Exec(sqlStr, id)
if err != nil {
fmt.Printf("delete failed,err:%v\n", err)
return
}
n, err := ret.RowsAffected()
if err != nil {
fmt.Printf("get id failed, err:%v\n", err)
return
}
fmt.Printf("删除了%d行数据\n", n)
}
func main() {
initDB()
// queryOne(2)
// queryMore(0)
// insert()
// queryOne(4)
// updateRow(1001, 4)
// queryOne(4)
queryMore(0)
deleteRow(4)
queryMore(0)
}