热门标签 | 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),
	})
})

在这里插入图片描述


推荐阅读
  • 本文探讨了 Objective-C 中的一些重要语法特性,包括 goto 语句、块(block)的使用、访问修饰符以及属性管理等。通过实例代码和详细解释,帮助开发者更好地理解和应用这些特性。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍如何利用动态规划算法解决经典的0-1背包问题。通过具体实例和代码实现,详细解释了在给定容量的背包中选择若干物品以最大化总价值的过程。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 本文详细探讨了VxWorks操作系统中双向链表和环形缓冲区的实现原理及使用方法,通过具体示例代码加深理解。 ... [详细]
  • 本文由瀚高PG实验室撰写,详细介绍了如何在PostgreSQL中创建、管理和删除模式。文章涵盖了创建模式的基本命令、public模式的特性、权限设置以及通过角色对象简化操作的方法。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了Java中org.w3c.dom.Text类的splitText()方法,通过多个代码示例展示了其实际应用。该方法用于将文本节点在指定位置拆分为两个节点,并保持在文档树中。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
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社区 版权所有