首页 > 数据库 >Go 连接数据库的增删改查

Go 连接数据库的增删改查

时间:2023-03-31 22:14:58浏览次数:42  
标签:Println name err fmt 改查 增删 Go age id

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

        }

    }
}

 

标签:Println,name,err,fmt,改查,增删,Go,age,id
From: https://www.cnblogs.com/xiaobaixuecheng101/p/17277593.html

相关文章

  • 增删改查功能
          注意:如果openSession()没有指定开启自动事务,那么增删改功能需要手动提交事务,如果openSession(true),则不需要再手动commit()           ......
  • 项目一众筹网05_03_树的节点的增删改查、radio、代码里面实现模拟用户点击重置、每次
    系列文章目录文章目录系列文章目录18-添加子节点-目标和思路19-添加子节点-前端:打开模态框20-添加子节点-前端:发送Ajax请求==代码里面实现模拟用户点击重置==21-添加子节点-后端==bug发现异步的问题:每次加载数据的时候都要考虑一下异步的问题==22-更新节点-目标和思路23-更新节点......
  • mongodb--文档查询
    一、简单查询--查询所有文档db.COLLECTION_NAME.find()--将查询结果以json形式显示db.COLLECTION_NAME.find().pretty()二、按条件查询文档db.COLLECTION_NAME.find(query,projection)参数说明:query:可选,projection:可选,查询时返回文档中所有键值,(默认省略)说明:按条件......
  • mongodb-文档的插入、更新与删除操作
    一、文档的插入--单文档插入db.COLLECTION_NAME.insert(document)db.COLLECTION_NAME.insertOne(document)--insert也可以插入多文档db.COLLECTION_NAME.save(document)--insert与save区别--insert方法插入若文档中已存在该文档,会报错,反之写入--save方法插入若集合中已......
  • mongodb--数据库操作与集合操作
    一、数据库操作1、新建数据库和切换数据库useDATABASE_NAME--DATABASE_NAME创建数据库的名字--如果刚创建完数据库,使用查看命令后没有的话,其实因为里面没有数据,所以才看不到2、查看所有数据库--查看所有数据库showdbs--查看当前数据库db 3、删除数据库--删除......
  • (转)Golang 编程思维和工程实战
    原文:https://zhuanlan.zhihu.com/p/426368274一Golang编程思维首先,我们先来看下最基本的,就是Golang的学习技巧,比如:通读Golang的一些好的文章如 FrequentlyAskedQuestions(FAQ)或者看看 FAQ的中文翻译 ,主要是了解Golang的全貌。Go精华文章列表Go相关博客......
  • 开心档之Go 错误处理
    Go错误处理Go语言通过内置的错误接口提供了非常简单的错误处理机制。error类型是一个接口类型,这是它的定义:typeerrorinterface{Error()string}我们可以在编码中通过实现error接口类型来生成错误信息。函数通常在最后的返回值中返回错误信息。使用errors.New......
  • (转) beego中URL反转使用
    原文:https://www.cnblogs.com/hei-ma/articles/13626245.html什么是URL反转:根据“URL路径对应的处理函数“来获取到对应”URL方法“就是URL反转。 URL反转的好处:url改变不需要跟着改代码。 URL反转使用示例1、本示例的路由规则如下beego.Router("/login",......
  • 测试平台RunnerGo,每位测试人员都该掌握的
    在软件开发中,软件质量保障是非常重要的环节,测试工作对于保证软件质量和用户体验至关重要。然而,测试流程繁琐,需要大量的人力和时间投入,往往会成为软件开发的瓶颈。一款好的测试平台可以大幅简化测试流程提高测试效率,其中,RunnerGo测试平台就是一种非常不错的选择。什么是RunnerGo?......
  • spring MongoDB 集成crud操作(简单封装)
    这两天一直在学习mongodb,由于我的博客网站想把mysql替换成mongodb,为什么会有这样的冲动,我通过收集一些资料,关于mongodb跟mysql的对比...发现性能上mongodb比上mysql是高出很多倍...无论是增,删,修,查的操作.....都比mysql效率好...但是,我也看到,mongodb是文档型数据库...做......