ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

GO操作数据库【学习自李文周老师博客】

2021-09-20 18:34:44  阅读:120  来源: 互联网

标签:return err db 数据库 李文周 failed Printf GO fmt


package main

import (
    "fmt"
    "time"

    _ "github.com/go-sql-driver/mysql"
    "github.com/jmoiron/sqlx"
)

type user struct {
    Id         int
    Name       string // 首字母大写,不然后面的Get拿不到值会报错,这个字段需要跟数据库字段对应
    Age        int
    Gender     []uint8 // go语言目前没有跟bit类型对应的数据类型
    Birthday   time.Time
    Salary     float32
    Department string
}

func main() {
    // 连接数据库
    var db *sqlx.DB
    dsn := "root:123456.com@(127.0.0.1:3306)/golang?charset=utf8mb4&parseTime=true"
    db, err := sqlx.Connect("mysql", dsn)
    if err != nil {
        fmt.Printf("connect DB failed, err:%v\n", err)
        return
    }
    db.SetMaxOpenConns(20)
    db.SetMaxIdleConns(10)
    // 单个查询
    sqlStr := "select name,age,gender,birthday,salary,department from emp where name=?"
    var u user
    err1 := db.Get(&u, sqlStr, "zhangsan")
    if err1 != nil {
        fmt.Printf("get failed, err:%v\n", err1)
        return
    }
    fmt.Printf("name:%s,age:%d,gender:%#v,department:%s,salary:%f\n", u.Name, u.Age, u.Gender, u.Department, u.Salary)
    // name:zhangsan,age:20,gender:[]byte{0x1},department:教学部,salary:8000.000000

    // 多行查询
    sqlStr1 := "select * from emp where id > ?"
    var users []user
    err2 := db.Select(&users, sqlStr1, 2)
    if err2 != nil {
        fmt.Printf("query failed, err:%v\n", err2)
        return
    }
    // fmt.Printf("users:%#v\n", users)
    for _, v := range users {
        fmt.Println(v)
    }
    // {3 rain 22 [1] 1990-06-06 00:00:00 +0000 UTC 20000 销售部}
    // {4 zhangsan 20 [1] 1985-12-12 00:00:00 +0000 UTC 8000 教学部}
    // {5 hanmeimei 21 [1] 1987-08-08 00:00:00 +0000 UTC 5000 保安部}

    // 插入数据
    sqlStr2 := "insert into emp(name,age,gender,birthday,salary,department) values (?,?,?,?,?,?)"
    ret, err := db.Exec(sqlStr2, "杨淑芳", 19, 0, "2000-01-02", 8123.32, "销售部")
    if err != nil {
        fmt.Printf("insert failed, err:%v\n", err)
        return
    }
    theID, err := ret.LastInsertId() // 新插入数据的id
    if err != nil {
        fmt.Printf("get lastinsert ID failed, err:%v\n", err)
        return
    }
    fmt.Printf("insert success, the id is %d.\n", theID)
    // insert success, the id is 6.

    // 更新数据
    sqlStr3 := "update emp set age=? where id = ?"
    ret1, err := db.Exec(sqlStr3, 39, 6)
    if err != nil {
        fmt.Printf("update failed, err:%v\n", err)
        return
    }
    n, err := ret1.RowsAffected() // 操作影响的行数
    if err != nil {
        fmt.Printf("get RowsAffected failed, err:%v\n", err)
        return
    }
    fmt.Printf("update success, affected rows:%d\n", n)
    // update success, affected rows:1

    // 删除数据
    sqlStr4 := "delete from emp where id = ?"
    ret3, err := db.Exec(sqlStr4, 6)
    if err != nil {
        fmt.Printf("delete failed, err:%v\n", err)
        return
    }
    n, err4 := ret3.RowsAffected() // 操作影响的行数
    if err4 != nil {
        fmt.Printf("get RowsAffected failed, err:%v\n", err4)
        return
    }
    fmt.Printf("delete success, affected rows:%d\n", n)
    // delete success, affected rows:1
}

 

标签:return,err,db,数据库,李文周,failed,Printf,GO,fmt
来源: https://www.cnblogs.com/tortoise512/p/15314849.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有