在前面的文章我们介绍了go语言相关的技术,这篇文章开始我们介绍下使用go语言操作数据库,这也是在日常生活中必然会使用到的技巧。
在go语言里面,我们要操作数据库,需要做两件事,分别是:
1、引入数据库的驱动 2、引入操作数据库的框架
下面我们演示下使用go语言操作mysql数据库的插入数据示例,直接开始:
1)首先我们引入mysql的驱动
这里我们引入的mysql驱动的话,可以直接使用
_ "github.com/go-sql-driver/mysql"
这里我们在前面添加了一个_,代表的意思就是我们需要使用这个驱动包的init方法,但是不需要调用这个驱动包里面其他的方法。
2)引入mysql操作框架
这里的话我们需要引入操作mysql的框架,在go语言里面各个操作mysql的框架非常的多,在github上开源的很多,但是这里我们演示的话使用的是sqlx。所以这里我们需要引入sqlx包
"github.com/jmoiron/sqlx"
3)初始化mysql链接信息
在执行sql语句之前,我们需要创建mysql的链接,同时让客户端与mysql之间保留创建一个链接,所以这里我们需要初始化mysql的链接信息,这里我们一般可以把代码放在init里面即可,也就是程序执行的时候就创建mysql链接,这样子后面直接使用即可。示例如下:
func initDB() (err error) { dsn := "test2:sxfxzmLm5yTc42Tb@tcp(192.168.31.30:3306)/test2?charset=utf8mb4&parseTime=True" // 也可以使用MustConnect连接不成功就panic db, err = sqlx.Connect("mysql", dsn) if err != nil { fmt.Printf("connect DB failed, err:%v\n", err) return } db.SetMaxOpenConns(20) db.SetMaxIdleConns(10) return } func init() { initDB() }
备注:
1、这里我们说的把初始化链接的代码放在init方法里面,指的是执行这些方法放在init上,但是初始化这些信息我们一般单独放在一个单独方法里面,这样子避免和其他初始化搞混了。
4)接着编写插入数据的示例
在插入数据的时候,我们经常会涉及到两种插入方式,第一种是单行插入,第二种是批量插入,这两种插入数据的方式主要是根据实际的场景使用,下面我们分别演示下单行插入和批量插入。
单行插入:
// 插入数据 func insertOne() { sqlStr := "insert into ccl(id,ccltype, amount,time,username) values (?,?,?,?,?)" ret, err := db.Exec(sqlStr, 2, 1, 10.00, "2023-06-29 13:46:00", "李四") if err != nil { fmt.Printf("insert failed, err:%v\n", err) return } id, err := ret.LastInsertId() // 新插入数据的id if err != nil { fmt.Printf("get lastinsert ID failed, err:%v\n", err) return } fmt.Printf("insert success, the id is %d.\n", id) }
批量插入:
// 批量插入 func insertAll() error { sqlStr := "insert into ccl(id,ccltype, amount,time,username) values(?),(?),(?),(?),(?)" users := []interface{}{ User{Id: 3, Ccltype: 1, Amount: 5.00, Time: "2023-06-30 14:00:00", Username: "王五"}, User{Id: 4, Ccltype: 1, Amount: 6.00, Time: "2023-06-30 15:00:00", Username: "赵六"}, User{Id: 5, Ccltype: 1, Amount: 7.00, Time: "2023-06-30 16:00:00", Username: "田七"}, User{Id: 6, Ccltype: 1, Amount: 8.00, Time: "2023-06-30 17:00:00", Username: "王八"}, User{Id: 7, Ccltype: 1, Amount: 9.00, Time: "2023-06-30 18:00:00", Username: "刘九"}, } query, args, _ := sqlx.In( sqlStr, users..., ) fmt.Println(query) // 查看生成的查询语句 fmt.Println(args) // 查看生成的args _, err := db.Exec(query, args...) fmt.Println("error : ", err) return err }
在最后我们调用具体的单行和多行批量插入方法即可。
备注:
1、go语言和java语言有很大的区别,java是面向对象编程,go语言你说他是面向对象编程呢,他又不是,说他是面向过程编程呢,他也不是,所以这块更像是一种随心所欲的思路性编程 2、基于go语言的变成方式,所以这里很多其他语言的特性他不一定有,例如java的异常处理机制。在go语言里面涉及到这种操作数据库的情况,都需要我们自己来处理异常,而且是挨个处理异常,是不是很麻烦?
以上就是我们使用Sqlx操作mysql的数据插入示例,最后附上本案例的源码,登录后即可查看。
还没有评论,来说两句吧...