Go通过sqlx操作数据库

package main

import (
    "fmt"
    _ "github.com/go-sql-driver/mysql" //mysql驱动
    "github.com/jmoiron/sqlx" //基于mysql驱动的封装
)
// 下载编译指定包
// go get github.com/go-sql-driver/mysql 
// go get github.com/jmoiron/sqlx

type Person struct {
    Uid      int    `db:"uid"`
    Username string `db:"username"`
    Nickname string `db:"nickname"`
    Sex      string `db:"sex"`
}

var Db *sqlx.DB

func init() {
    //sqlx.Open(数据库类型, "账号:密码@tcp(服务器IP:端口)/数据库")
    database, err := sqlx.Open("mysql", "root:root@tcp(127.0.0.1:3306)/2021kupdate_v506")
    if err != nil {
        fmt.Println("open mysql failed,", err)
        return
    }

    Db = database
    // defer Db.Close()  // defer延迟执行
}

func main() {
    // findDemo()
    // selectDemo()
    // insertDemo()
    updateDemo()
    // deleteDemo()
}

/**
 * [findDemo 查询单条]
 * Get方法-结构体存储
 * Db语句: Db.Get(结构体指针, sql语句, 占位符值)
 * @return {[type]} [description]
 */
func findDemo() {
    var person Person
    err := Db.Get(&person, "select uid,username,nickname,sex from chat_members where uid=?", 6)
    if err != nil {
        fmt.Println("查询失败, ", err)
        return
    }

    fmt.Println("Get succ:", person)
}

/**
 * [selectDemo 查询多条数据]
 * Select方法--切片存储
 * Db语句: Db.Select(结构体指针, sql语句, 占位符值)
 * @return {[type]} [description]
 */
func selectDemo() {
    var person []Person
    err := Db.Select(&person, "select uid,username,nickname,sex from chat_members where uid>?", 0)
    if err != nil {
        fmt.Println("查询失败, ", err)
    }
    fmt.Println("Select Data:", person)
}

/**
 * [insertDemo 新增]
 * Db语句: Db.Exec(sql添加语句, 占位符值)
 *         LastInsertId() -- 获取新增ID
 * @return {[type]} [description]
 */
func insertDemo() {
    res, err := Db.Exec("insert into chat_test(username, nickname) value(?, ?)", "用户名", "昵称")
    if err != nil {
        fmt.Println("新增失败, ", err)
    }

    insertID, err := res.LastInsertId()
    if err != nil {
        fmt.Println("获取新增ID失败, ", err)
    }

    fmt.Println("InsertID: ", insertID)
}

/**
 * [updateDemo 修改]
 * Db语句: Db.Exec(sql修改语句, 占位符值)
 *         RowsAffected() -- 获取受影响行数
 * @return {[type]} [description]
 */
func updateDemo() {
    res, err := Db.Exec("update chat_test set nickname=? where id=?", "昵称修改", 1)
    if err != nil {
        fmt.Println("修改失败, ", err)
    }
    rowsAffected, err := res.RowsAffected()
    if err != nil {
        fmt.Println("获取受影响行数失败, ", rowsAffected)
    }
    fmt.Println("rowsAffected: ", rowsAffected)
}

/**
 * [deleteDemo 删除]
 * Db语句: Db.Exec(sql删除语句, 占位符值)
 *         RowsAffected() -- 获取受影响行数
 * @return {[type]} [description]
 */
func deleteDemo() {
    res, err := Db.Exec("delete from chat_test where id = ?", 2)
    if err != nil {
        fmt.Println("删除失败, ", err)
    }
    deleteNumber, err := res.RowsAffected()
    if err != nil {
        fmt.Println("获取受影响行数失败", err)
    }
    fmt.Println("deleteNumber: ", deleteNumber)
}


后续持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红尘炼炼心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值