ICode9

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

GO语言操作mysql数据库

2022-06-15 22:35:34  阅读:184  来源: 互联网

标签:nil err 数据库 Printf db sql mysql GO fmt


mysql库的安装:

直接在vscode终端运行:

go get -u github.com/go-sql-driver/mysql

 下载完之后,导入包

import (
	"database/sql"
	"fmt"

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

数据库初始化:

//定义全局变量db,方便之后对数据库操作
var db *sql.DB

//定义一个初始化数据库函数
func initDB() (err error) {
	dsn := "root:密码@tcp(127.0.0.1:3306)/操作的数据库?charset=utf8mb4&parseTime=True"
	//打开数据库
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		return err
	}
	//尝试与数据库建立连接(校验dsn是否正确)
	err = db.Ping()
	if err != nil {
		return err
	}
	return nil
}

插入数据:

func insertData() {
        //这里“?"充当占位符
	sqlStr := "insert into user_tbl(username,password) values (?, ?)"
        //返回执行sql语句的结果集和报错
	r, err := db.Exec(sqlStr, "张三", "zs123")
	if err != nil {
		fmt.Printf("insert failed,err: %v\n", err)
		return
	} else {
		i, _ := r.LastInsertId()
		fmt.Printf("i: %v\n", i)
	}

}

查询一行数据:

type User struct {
	id       int
	username string
	password string
}

func queryOneRow() {
	s := "select * from user_tbl where id = ?"
	var u User
	//这里scan是把前面查询结果赋值给另一个对象(User)
	err := db.QueryRow(s, 1).Scan(&u.id, &u.username, &u.password)
	if err != nil {
		fmt.Printf("err: %v\n", err)
	} else {
		fmt.Printf("u: %v\n", u)
	}
}

查询多行数据:

func queryManyRow() {
	s := "select * from user_tbl"
	r, err := db.Query(s)
	var u User
	defer r.Close()
	if err != nil {
		fmt.Printf("err: %v\n", err)
	} else {
                //从结果集中遍历每行数据
		for r.Next() {
			r.Scan(&u.id, &u.username, &u.password)
			fmt.Printf("u: %v\n", u)
		}
	}
}

更新数据:

func update() {
	s := "update user_tbl set username=?, password=? where id=?"
	r, err := db.Exec(s, "big kite", "456789", 2)
	if err != nil {
		fmt.Printf("err: %v\n", err)
	} else {
                //RowsAffected返回影响了几行和错误
		i, _ := r.RowsAffected()
		fmt.Printf("i: %v\n", i)
	}
}

删除数据:

跟上述更新类似,只是sql语句不同而已

delete from user_tbl where id=?

 

标签:nil,err,数据库,Printf,db,sql,mysql,GO,fmt
来源: https://www.cnblogs.com/nLesxw/p/go_mysql_learn.html

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

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

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

ICode9版权所有