Go 连接数据库的增删改查

复制代码
package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

var db *sql.DB

func initDB() (err error) {
    dsn := "root:123456@tcp(127.0.0.1)/ssmd"
    db, err = sql.Open("mysql", dsn)
    if err != nil {
        //格式不正确
        //fmt.Printf("open %s ,err %s", dsn, err)
        return err
    }
    //ping数据库
    err = db.Ping()
    if err != nil {
        //验证是否正确
        //fmt.Printf("open %s ,failad err %s", dsn, err)
        return err
    }
    //设置最大连接数量
    db.SetMaxOpenConns(10)
    fmt.Println("数据库连接成功")
    return
}

var u1 user

func queryRew(id int) {
    sqlStr := "SELECT * FROM `user` WHERE id =?"
    db.QueryRow(sqlStr, id).Scan(&u1.id, &u1.name, &u1.age)
    //rowObj
    fmt.Printf("u1 %#v\n", u1)
}

func query() {
    sqlStr := "SELECT * FROM `user`"
    rows, _ := db.Query(sqlStr)
    defer rows.Close()
    //    循环取值
    for rows.Next() {
        rows.Scan(&u1.id, &u1.name, u1.age)
        fmt.Println(u1)

    }
}
func insert(name string, age int) {
    sqlStr := "INSERT INTO `ssmd`.`user` (`name`, `age`) VALUES (?, ?)"
    ert, err := db.Exec(sqlStr, name, age)
    if err != nil {
        fmt.Println("新增失败")
        return
    }
    id, _ := ert.LastInsertId()
    fmt.Println(id, "新增")
}
func Dle(id int) {
    sqlStr := "DELETE FROM `ssmd`.`user` WHERE `id` = ?"
    del, _ := db.Exec(sqlStr, id)
    insertId, err := del.LastInsertId()
    if err != nil {
        return
    }
    fmt.Println(insertId, "删除")

}
func XiuGai(name string, age, id int) {
    sqlStr := "UPDATE `ssmd`.`user` SET `name` = ?, `age` = ? WHERE `id` = ?"
    exec, err := db.Exec(sqlStr, name, age, id)
    if err != nil {
        return
    }
    insertId, err := exec.LastInsertId()
    if err != nil {
        return
    }
    fmt.Println(insertId, "修改")

}

type user struct {
    id   int
    name string
    age  int
}

func main() {

    err := initDB()
    if err != nil {
        fmt.Printf("init DB failed ,err :%v\n", err)
    }
    for {
        fmt.Println("输入你的操作【1】查询【2】新增【3】修改【4】删除【5退出】【11】查询多条")
        var shu int
        fmt.Scanln(&shu)
        switch shu {
        case 1:
            fmt.Println("输入你要查询的id")
            var id int
            fmt.Scanln(&id)
            queryRew(id)
            continue
        case 11:
            query()
            continue
        case 2:
            var (
                name string
                age  int
            )
            fmt.Print("输入名字")
            fmt.Scanln(&name)
            fmt.Print("输入年龄")
            fmt.Scanln(&age)
            insert(name, age)
            continue
        case 3:
            var (
                name    string
                id, age int
            )
            fmt.Println("输入名字")
            fmt.Scanln(&name)
            fmt.Println("输入年龄")
            fmt.Scanln(&age)
            fmt.Println("输入ID")
            fmt.Scanln(&id)
            XiuGai(name, age, id)
            continue
        case 4:
            var id int
            fmt.Println("输入删除id")
            fmt.Scanln(&id)
            Dle(id)
            continue
        case 5:
            return

        default:
            fmt.Println("输入错误")
            continue

        }

    }
}
复制代码

 

posted @   小白学程  阅读(61)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示