前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang sql 数据库链接

golang sql 数据库链接

作者头像
copy_left
发布2019-08-21 16:40:27
2.4K0
发布2019-08-21 16:40:27
举报
文章被收录于专栏:方球

sql

创建数据库对象
代码语言:javascript
复制
var (
    userName = "root"
    password = 1111
    ip       = "127.0.0.1"
    port     = "3306"
    dbName   = "todo"
    dbPath   = fmt.Sprintf("%s:%d@tcp(%s:%s)/%s?charset=utf8", userName, password, ip, port, dbName)
    driver   = "mysql"
)
    
    // 创建连接
    DB, dbOpenErr := sql.Open(driver, dbPath)
    
    // 关闭连接
    defer DB.Close() 
      
    if dbOpenErr != nil{
        fmt.Println("err: ", dbOpenErr)
    }
执行sql语句
代码语言:javascript
复制
    // 返回执行结果概述和错误信息
    if r, e := DB.Exec("UPDATE user SET age=100 WHERE id=4"); e != nil {
        fmt.Println("err: ", e)
    } else {
        fmt.Println("success: ", r)
    }
查询
代码语言:javascript
复制
type User struct {
    Id       int64  `json:"id"`
    Nickname string `json:"nickname"`
    Age      int    `json:"age"`
    Img      string `json:"img"`
}


    // QueryRow => *Row 查询单条数据
        DB, dbOpenErr := sql.Open(driver, dbPath)

    if dbOpenErr != nil {
        fmt.Println("open err: ", dbOpenErr)
    }
    
    
    r := DB.QueryRow("SELECT id, nickname FROM user")
    /*  带参数的查询
        ? 作为占位符号
        r := DB.QueryRow("SELECT ?, ? FROM ?", "id", "nickname", "user")
    */

    var user User

    r.Scan(&user.Id, &user.Nickname)

    fmt.Println(user)


// -------------------------------------


    // Query => Rows 返回多条匹配数据
    r, _ := DB.Query("SELECT id, nickname, age, img FROM user")

    users := []User{}
    
    //遍历数据行, Rows.Next() => bool 调用下一条 Row
    for r.Next() {

        var user User
        
        /* Rows.Scan(dest ...interface{}) 将数据注入参数中, 
        参数数量必须与查询结果结构相同.
        */
        if err := r.Scan(&user.Id, &user.Nickname, &user.Age, &user.Img); err != nil {
            fmt.Println("get err: ", err)
        } else {

            users = append(users, user)
        }

    }
执行事务
代码语言:javascript
复制
tx, err := DB.Begin()

    if err != nil {
        fmt.Println("begin error: ", err)
    }

    u := NewUser()

    // 查询数据
    cocoInfo := tx.QueryRow("SELECT nickname, age FROM user WHERE nickname='coco'")
    cocoInfo.Scan(&u.Nickname, &u.Age)
    fmt.Println("\ncocoInfo: ", u)

    // 执行sql语句
    tx.Exec("UPDATE user SET img='./head.png' WHERE id=4")

    // 提交
    tx.Commit()
其他
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.02.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sql
    • 创建数据库对象
      • 执行sql语句
        • 查询
          • 执行事务
            • 其他
            相关产品与服务
            数据库
            云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档