本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下:
go的sql包是在pkg/database中,里面的两个包sql和sql/driver可以一起看。建议看这个两个包之前可以先看看sql文件夹下的doc.txt。这个文档说了几点比较重要的:
1 这两个包是真正Go风格的包。
2 这使用这两个包就不需要关于并发处理了,也不需要维护自己的数据库连接池了,一旦建立了一个连接,这个连接是可以在各个goroutine之间共用的。
3 sql/driver提供的是数据库的接口,具体的实现还需要自己实现。
先看database/driver包
第一个用到的方法是Register
这个方法将实现了driver.Driver的驱动注册到变量drivers中,当写完一个驱动之后,就需要将驱动注册到sql中才能使用sql包中的这些接口。这个实现了driver.Driver的必须实现了Open方法.
driver.Open返回的是driver.Conn,它的三个方法
Prepare : 参数绑定
Close : 关闭连接
Begin : 支持事务
先看Prepare,这个和php mysql pdo一样的用法
Conn.Prepare("select * from test where a=")
返回的Stmt结构:
Close : 关闭这个statement
NumInput : 返回有多少个可以绑定的参数
Exec : Insert或者update等无返回的使用
Query :select等查询操作使用
Exec是绑定变量,然后返回Result结构
Query是绑定变量,然后返回Rows结果集
看Result里面的方法:
LastInsertId() : Insert操作之后获取到的主键id
RowsAffect() : 影响到的行数
Rows:
Columns() : 返回的数据有哪些列,其实就是返回的表列名
Close() : 关闭Rows,调用之后不能再进行任何操作
Next() : 将下一行的数据取到des[] Value中。这里的Value接口可以是int64,float64,bool,[]byte,string,time.Time
下面回到Begin,返回了Tx
开始事务之后除了查询之外,就两种行为:Commit和Rollback,这两种行为都是Tx接口的方法
drvier中的结构全是接口性质的,它需要你来实现并注册到Register中。
驱动的具体使用是在database/sql中
首先将几个sql的结构看一遍
首先sql中的结构都是对driver中的结构进行了一层封装,比如像Rows,有个内部属性是rowsi driver.Rows。
对sql的实际操作都是使用driver.Rows里面的接口进行操作的,实际也就是使用你自己实现的driver进行操作。
driver和sql就像插头和一个充满插头的汽车一样,你实现了driver,即实现了这些插头的配置,你就可使用sql这个汽车了。
Result : 和driver中的Result一致,即你如果实现了driver.Result,那你自然就实现了sql.Result。它是个接口,其实没有什么特殊的用处,如果sql包中的所有Result都换成driver.Result也是行的,估计是作者希望返回值不要引用到其他包去,就使用这种方法。
Rows : 基于了driver.Rows, 还在上面扩展了几个其他的方法。拥有方法:
Close
Cloumns
Err
Next
Scan
Stmt :基于driver.Stmt。拥有方法
Close
Exec
Query
QueryRow
Tx:基于driver.Tx。拥有方法:
Commit
Exec
Prepare
Query
QueryRow
Rollback
Stmt
从sql.Open开始
返回了sql.DB结构,这个结构是实现了driver.Conn结构,除了Conn已有的Prepare,Begin,Close之外,还直接多了几个查询方法:
Driver() : 返回当前驱动
Exec() : 直接进行操作
Query() : 进行查询,返回Rows
QueryRow() : 预期返回单行,返回Row
不管Rows还是Row都有个很好用的方法Scan来将数据放到制定的变量中去。
比如下面就是典型的Rows用法
复制代码 代码如下:rows, err := db.Query("SELECT ...")
...
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
...
}
Prepare返回Stmt结构
Exec返回Result结构
至于这几个结构也有各自的方法。
希望本文所述对大家Go语言程序设计有所帮助。
go语言,sql包,原理,用法
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 黄乙玲1988-无稳定的爱心肝乱糟糟[日本东芝1M版][WAV+CUE]
- 群星《我们的歌第六季 第3期》[320K/MP3][70.68MB]
- 群星《我们的歌第六季 第3期》[FLAC/分轨][369.48MB]
- 群星《燃!沙排少女 影视原声带》[320K/MP3][175.61MB]
- 乱斗海盗瞎6胜卡组推荐一览 深暗领域乱斗海盗瞎卡组分享
- 炉石传说乱斗6胜卡组分享一览 深暗领域乱斗6胜卡组代码推荐
- 炉石传说乱斗本周卡组合集 乱斗模式卡组最新推荐
- 佟妍.2015-七窍玲珑心【万马旦】【WAV+CUE】
- 叶振棠陈晓慧.1986-龙的心·俘虏你(2006复黑限量版)【永恒】【WAV+CUE】
- 陈慧琳.1998-爱我不爱(国)【福茂】【WAV+CUE】
- 咪咕快游豪礼放送,百元京东卡、海量欢乐豆就在咪咕咪粉节!
- 双11百吋大屏焕新“热”,海信AI画质电视成最大赢家
- 海信电视E8N Ultra:真正的百吋,不止是大!
- 曾庆瑜1990-曾庆瑜历年精选[派森][WAV+CUE]
- 叶玉卿1999-深情之选[飞图][WAV+CUE]