2021-05-12 GoLang数据库操作 CRUD

GoLang数据库操作 CRUD

本文是本人第一次尝试用GO来操控数据库,做一些简单的增、删、改、查的操作
着重于记载尝试过程中遇到的问题和如何解决这些问题的方法

安装MYSQL驱动遇到的一些问题

  1. 以mysql为例,Go本身不提供具体数据库驱动,只提供驱动接口和管理,因此需要导入包的方式来获取驱动。
    需要的包如图 log为自选
    图片位置为mysql驱动,但是直接输入如图的包,IDE红,提示无法导入
    解决方法:
    在GoLand中点击左下角的Terminal,在Terminal中输入***go get -u github.com/go-sql-driver/mysql***
    有可能会出现如下错误

    原因是没有正常编译所编辑的文件
    解决方法:
    在Terminal中编译文件:e.g.文件hello.go
    go mod init hello
    如果显示mod文件已经存在,可以手动删除已经存在的go.mod文件
    然后再输入***go get -u github.com/go-sql-driver/mysql***
    (编译后驱动包在导入处依然可能是红色的,但是不影响运行,在我尝试中是可以正常操作数据库的)

链接数据库

在开始CRUD前,首先需要链接数据库,代码如下

func db_connection(){
	db, err :=sql.Open("mysql", "root:rootp(localhost:3306)/test") /** 格式: mysql用户名:mysql密码 test为数据库名 */
	if err != nil {
		fmt.Println(">>> fail to connect to db <<<")
	}
	defer db.Close()
	fmt.Println(">>> succeed to connect to db <<<")
}

结构体完成数据库与程序变量的映射

我的数据库中有一张表 user,结构如图
数据库表结构图

type User struct{
	id int
	FirstName string
	LastName string
	gender string
	age int
	email string
}

根据数据库中对应表的结构来创建结构体

Create 增加

func insert(db *sql.DB) {
	stmt, err := db.Prepare("INSERT INTO user(FirstName,LastName,gender,age,email) values('Andy','Lou','Male',60,'Andy@Andy')")
	if err != nil {
		panic(err)
	}
	defer stmt.Close()
	result, err := stmt.Exec()
	if err != nil {
		panic(err)
		fmt.Println("Add Fail")
	}
	id,err := result.LastInsertId()
	fmt.Println("Successfully Added user with id: ",id)

	defer db.Close()
}

Retrieve 检索

func query(db *sql.DB){
	rows,err := db.Query("Select * from user ")
	if err !=nil{
		panic(err)
	}
	for rows.Next(){
		var id int
		var fn string
		var ln string
		var gen string
		var age int
		var email string
		if err := rows.Scan(&id,&fn,&ln,&gen,&age,&email); err!=nil{
			log.Fatal(err)
		}
		fmt.Printf("User id: %d\tFistName: %s\tLastName: %s\tGender: %s\tAge: %d\tEmail: %s\n",id,fn,ln,gen,age,email)

	}
	defer rows.Close()
	defer db.Close()
}

Update 更新

func update(db *sql.DB){
	stmt,err := db.Prepare("UPDATE user SET LastName ='Liu' WHERE id=5")
	if err!=nil{
		panic(err)
	}
	_, err = stmt.Exec()
	if err!=nil{
		fmt.Println("Update Fail")
		panic(err)
	}
	fmt.Println("Successfully Updated")
}

Delete删除

func delete(db *sql.DB){
	stmt,err := db.Prepare("DELETE FROM user WHERE id=5")
	if err !=nil{
		panic(err)
	}
	result,err:=stmt.Exec()
	if err!=nil{
		panic(err)
		fmt.Println("Delete fail")
	}
	_, err = result.LastInsertId()
	fmt.Println(" Successfully Delete")
}

总结

对GO还在学习阶段,分享内容比较基础,大多是我在学习中碰见的问题
后续还会风险更多细节和新的项目
希望熟悉GO的朋友指出错误,一起探讨
祝大家学习愉快,生活愉快 🌷

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值