• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    go语言的sql包原理与用法分析

    本文实例讲述了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语言通过odbc访问Sql Server数据库的方法
    • Go语言使用MySql的方法
    • Go语言操作mysql数据库简单例子
    • 在Go语言程序中使用gojson来解析JSON格式文件
    • go语言读取json并下载高清妹子图片
    • Go语言对JSON进行编码和解码的方法
    • Go语言中转换JSON数据简单例子
    • go语言通过odbc操作Access数据库的方法
    • golang实现sql结果集以json格式输出的方法
    上一篇:go的websocket实现原理与用法详解
    下一篇:Golang继承模拟实例详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    go语言的sql包原理与用法分析 语言,的,sql,包原理,包,原理,