热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Go增删改查——mysql

Go增删改查——mysql,Go语言社区,Golang程序员人脉社

scan函数讲解
我们怎样读取用户从键盘(控制台)输入的数据?输入指从键盘或其它标准输入(os.Stdin)读取数据。最简单的方法是使用fmt包里的Scan-或Sscan-系列函数

scan函数会识别空格左右的内容,哪怕换行符号存在也不会影响scan对内容的获取
scanln函数会识别空格左右的内容,但是一旦遇到换行符就会立即结束,不论后续还是否存在需要带输入的内容。

操作数据库

1.导包并连接

import (
"database/sql"
"fmt"
_ "github.com/Go-SQL-Driver/MySQL"

)

db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
if err != nil{
	fmt.Printf("connect mysql fail ! [%s]",err)
}else{
	fmt.Println("connect to mysql success")
}

2.增加

result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8")
if err != nil{
	fmt.Println("insert failed,",err)
}
userId,err:= result.LastInsertId()
rowCount,err:=result.RowsAffected()  //影响行
fmt.Println("user_id:",userId)
fmt.Println("rowCount:",rowCount)

3.查询
// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。
// Scanln 和 Scan 类似,scan遇到换行当做空格,scanln遇到换行符就停止扫描。

rowsQuery,err := db.Query("SELECT * FROM person WHERE )
if err != nil{
	fmt.Println("select db failed,err:",err)
	return
}
for rowsQuery.Next() {
	var height int
	var head  string
	var address  string
	err = rowsQuery.Scan(&head,&height,&address)// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(height,address,head)
}
rowsQuery.Close()
}

4删除

rowsDelete,err:=db.Exec("DELETE FROM person WHERE )

5改

rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE )

代码附录

	package main

	import (
	"database/sql"
	"fmt"
	_ "github.com/Go-SQL-Driver/MySQL"
)
		func main()  {
	/*	db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/person?charset=utf8")*/
		db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")
		if err != nil{
			fmt.Printf("connect mysql fail ! [%s]",err)
		}else{
			fmt.Println("connect to mysql success")
		}
		/*result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8")
		if err != nil{
			fmt.Println("insert failed,",err)
		}
		userId,err:= result.LastInsertId()
		rowCount,err:=result.RowsAffected()
		fmt.Println("user_id:",userId)
		fmt.Println("rowCount:",rowCount)*/
	
	
	
		/*rowsQuery,err := db.Query("SELECT * FROM person WHERE )
		if err != nil{
			fmt.Println("select db failed,err:",err)
			return
		}
		for rowsQuery.Next() {
			var height int
			var head  string
			var address  string
			err = rowsQuery.Scan(&head,&height,&address)
			if err != nil {
				fmt.Println(err)
				return
			}
			fmt.Println(height,address,head)
		}
		rowsQuery.Close()*/
	
	/*	rowsDelete,err:=db.Exec("DELETE FROM person WHERE )
	
		fmt.Println(rowsDelete.LastInsertId())*/
	
		rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE )
		fmt.Print(
			rowsUpdate.LastInsertId())
	}

postman发送POST请求往数据库增加数据
mysql.go

	import (
"database/sql"
"log"
_ "github.com/Go-SQL-Driver/MySQL"
)

type User struct {
	Id       int    `json:"id" form:"id"`
	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
}

func DBConn()(db *sql.DB) {
	dbDriver := "mysql"
	dbUser := "root"
	dbPass := "123456"
	dbName := "test"
	db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName)
	if err != nil { panic(err.Error()) }
	return db }
		func add(user User) (Id int, err error) {

	//1.操作数据库
	db:=DBConn()
	//推迟数据库连接的关闭
	defer db.Close()
	stmt, err := db.Prepare("INSERT INTO person(id,username, password) VALUES (?,?, ?)")
	if err
//将id类型转换
		Id = int(id)
		defer stmt.Close()
		return

main.go

router.POST("/add", func(c *gin.Context) {
	var  u User
	err := c.Bind(&u)
	if err != nil {
		log.Fatal(err)
	}
	Id, err := add(u)
	fmt.Print("id=", Id)
	c.JSON(http.StatusOK, gin.H{
		"message": fmt.Sprintf("%s 插入成功", u.Username),
	})
})

在这里插入图片描述


推荐阅读
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 如何将955万数据表的17秒SQL查询优化至300毫秒
    本文详细介绍了通过优化SQL查询策略,成功将一张包含955万条记录的财务流水表的查询时间从17秒缩短至300毫秒的方法。文章不仅提供了具体的SQL优化技巧,还深入探讨了背后的数据库原理。 ... [详细]
  • 解决JavaScript中法语字符排序问题
    在开发一个使用JavaScript、HTML和CSS的Web应用时,遇到从SQLite数据库中提取的法语词汇排序不正确的问题,特别是带重音符号的字母未按预期排序。 ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • JUnit下的测试和suite
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
author-avatar
琉璃梦0_471
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有