Golang个人总结(数据库部分)
本文最后更新于 300 天前,其中的信息可能已经有所发展或是发生改变。如有疑问或错误请反馈至邮箱super.lucky.qu@gmail.com

前言

Golang个人总结的数据库部分由本人跟学教材时的个人理解与做题总结而来,难免具有很多错误,如发现请指正,谢谢!

电脑端可以于左栏“文章目录”来索引到指定小节,手机端可以通过左上角按钮唤出菜单索引到指定小节

连接数据库

流程

使用函数sql.Open()来打开数据库,这个函数接收两个值,第一个值为数据库驱动名称,第二个值为数据源名称,返回一个指向sql.DB这个struct的指针

注:MySQL的数据源名称格式为:user:password@/dbname

获取驱动

使用sql.Register()函数,传入数据库的名称和一个实现了driver.Driver接口的struct来注册数据库的驱动,例如sql.Register("sqlserver",&drv{})

驱动可以进行自我注册,原理是每个包的init函数会自动调用

可以导包的时候前面加上”_”来使用他的自动注册

验证连接

使用这个方法去进行验证是否连接成功:

func (*sql.DB)PingContext(c context.Context)

这个方法用来验证与数据库的连接是否仍然有效,如果有必要则再建立一个连接

方法接收一个Context类型,这个类型可以携带截止时间,取消信号和其他请求范围的值,并且可以横跨API边界和进程

可以使用context.Background()函数,这个函数返回一个非nil的空context,他不会被取消,因为它既没有值也没有截止时间,其通常用于main函数,初始化或测试中,作为传入请求的顶级context

注意事项

sql.DB是用来操作数据库的,代表了0个或者多个底层连接的池,这些连接由sql包进行维护,sql包会自动创建和释放这些连接,他也是线程安全的

Open()函数并不会连接数据库,也不会验证参数,只是将后续连接到数据库所需要的structs设置好,而连接是在被需要的时候进行懒设置的

在使用sql.DB的时候,可以定义他的全局变量进行使用,也可以将它传递进函数/方法内使用

用于增的方法有:

  • Exec
  • ExecContext

在Exec内填写SQL语句(CREATE)即可

用于删的方法有:

  • Exec
  • ExecContext

在Exec内填写SQL语句(DELETE)即可

用于改的方法有:

  • Exec
  • ExecContext

在Exec内填写SQL语句(UPDATE)即可

查询方法

在sql.db上,用于查询的方法有

  • Query
  • QueryRow
  • QueryContext
  • QueryRowContext

其中,Query会回的类型为Rows,Rows具有以下方法:

//在查询后关闭
func (rs *Rows)Close()error 
//查询返回所有的列的消息
func (rs *Rows)ColumnTypes([]*ColumnType,error)
//返回所有的列名
func (rs *Rows) Columns()([]string,error)
//如果出错返回错误
func (rs *Rows)Err()error
//遍历结果集,一次遍历一行的数据,如果返回的bool类型值为true代表仍有数据未读取,返回false代表读取完毕
func (rs *Rows)Next()bool
//如果查询包含多个结果集,那么他将会准备下一个结果集用于读取,如果结果集读取完毕返回false,否则返回true
func (rs *Rows)NextResultSet()bool
//把当前行的数据拷贝下来然后分别放到后面跟着的变量内(地址)
func(rs *Rows) Scan(dest ...interface{})error

QueryRow具有以上的Err和Scan方法,区别是上面的用于查询多行,而QueryRow常用于查找单行

上一篇
下一篇