2021-05-12
Posted 涂涂努力ing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021-05-12相关的知识,希望对你有一定的参考价值。
GoLang数据库操作 CRUD
本文是本人第一次尝试用GO来操控数据库,做一些简单的增、删、改、查的操作
着重于记载尝试过程中遇到的问题和如何解决这些问题的方法
安装mysql驱动遇到的一些问题
- 以mysql为例,Go本身不提供具体数据库驱动,只提供驱动接口和管理,因此需要导入包的方式来获取驱动。
图片位置为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的朋友指出错误,一起探讨
祝大家学习愉快,生活愉快 🌷
以上是关于2021-05-12的主要内容,如果未能解决你的问题,请参考以下文章