生活服务
Go - 数据库原生操作包database/sql
2024-12-31 03:25  浏览:89

前言:Go标准库下的database/sql包为我们操作各类数据库提供了一个统一操作的接口,各大数据库开发商据此包提供相关的数据库驱动实现。我们开发者下载安装所需驱动,调用sql包下相关api即可对数据库操作。其优点为不同数据库的操作可公用一套代码,切换驱动包即可。

,加载数据库驱动,测试链接是否正常

  • 到官网下载mysql驱动到本地 (以mysql数据库为列)https://github.com/go-sql-driver/mysql
     
  • 匿名导入数据库驱动包,注册驱动
     
  • Open(driverName,dsn)方法校验俩参数是否正确,返回数据库操作句柄*DB
     
      


    1.dsn为操作的数据库资源名称,格式为 [username[:password]@][protocol[(address)]]/dbname[?param1=value1&…&paramN=valueN]
    详情可到https://github.com/go-sql-driver/mysql 查看.
    2.sql.Open()方法只是做参数的校验(即驱动名是否与注册的驱动相同),并没有打开一个数据库链接。我们可到源码的注释里可以看到
    // Open may just validate its arguments without creating a connection
    // to the database. To verify that the data source name is valid, call
    // Ping.

  • Ping()方法测试数据库是否链接成功(校验dsn参数是否正确有效)
     
      

    Open,Ping方法调用过程可简记为【两参校验法】,即driverName,dsn参数校验。只有在这两步都成功后后续数据库的CURD才能相继展开。

,数据库的CURD

1. 非查询类的api操作

非查询类顾名思义即为增删改相关的数据库操作,使用Db.Exec(sql,…interface{})方法来实现,sql语句即为增删改的语句,参数二为需要传入sql语句里的值。方法返回Result一个结构体对象其包含了一个获取受影响行数和获取该条记录id的方法。

  • Db.Exec(sql,…interface{}) 增删改业务执行的方法,传入相关sql语句执行即可
  • Db.Prepare(sql),Stmt.Exec() ,Stmt.Close() 预编译处理,多次执行
 
 
2. 查询类的api操作
  • 单条查询
    • Db.QueryRow() 查询一条记录,返回Row结果
    • row.Scan() 将查询到的记录值扫描到传入参数中
     
  • 多条查询
    • Db.Query() 查询多条记录,返回Rows结果集
    • rows.Next() 移动到下一条记录,以便Scan()读取
    • row.Scan() 读取记录的字段值到参数
    • rows.Close() 关闭资源
     
3. 数据库null值的处理

1.因为数据库字段的值可能存在设置为可null的情况,而Go语言是强类型的语言在其基础数据类型中没有匹配null的数据类型。此时我们可以用database/sql包下提供的NullString,NullFloat64,NullInt32,NullBool,NullTime结构体类型来代替相关变量的数据类型,来解决此问题。
2.其中各结构体里有两个成员变量,一个是各自类型的变量值,一个bool类型的Valid(当其值不为null时为true)。

4. 预编译,预处理sql

一次编译,多次执行。eg:循环执行插入

  • func (db *DB) Prepare(query string) (*Stmt, error) //预编译sql
  • func (s *Stmt) Exec(args …interface{}) (Result, error) //stmt对象来传入参数执行
  • func (s *Stmt) Close() error //关闭资源
  • 当然还有单查询和多条查询也可以先预编sql。对于多次的执行来提高执行效率

,事务

  • func (db *DB) Begin() (*Tx, error) 开始事务
  • func (tx *Tx) Commit() error 提交事务
  • func (tx *Tx) Rollback() error 回滚中止事务
    以上就是本篇文章【Go - 数据库原生操作包database/sql】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/tnews/3681.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
电信怎么设置呼叫转移功能,座机怎么设置呼叫转移功能oppo手机怎么设置呼叫转移「电信怎么设置呼叫转移功能,座机怎么设置呼叫转移功能」
最佳答案1.我们拨通10000,然后再按照语音提示接通人工服务; 2.然后我们再让客服来开通呼叫转移这个功能,还有其他两个选项,但
把强大的chrome浏览器安装到手机上,并支持电脑版的各种扩展CRX插件chrome手机版「把强大的chrome浏览器安装到手机上,并支持电脑版的各种扩展CRX插件」
发现了一款强大的手机版chrome浏览器,这个绝对不是应用市场里面的那个chrome,应用市场里的chrome不够强大,而且无法安卓扩展插
红警大作战尤里的复仇红警复仇手机版「红警大作战尤里的复仇」
红警大作战尤里的复仇是一款经典游戏的延续之作,经典的游戏红色警戒相信大家都玩过,这款游戏是在经典的基础上加以进化,让玩家
超千亿元回购增持再贷款!A500ETF今日低开高走,实时成交额突破9000万元
消息面上,自去年10月18日股票回购增持再贷款政策工具正式设立至今已半年,上市公司和主要股东积极响应。据Wind资讯数据统计,截
折叠手机铰链耐久度对决!三星超越摩托罗拉,OPPO表现引人瞩目摩托罗拉折叠手机「折叠手机铰链耐久度对决!三星超越摩托罗拉,OPPO表现引人瞩目」
前几日,有外网博主进行了一项“利好消费者但很无聊”的实验,就是直播两款折叠手机的铰链耐用度,型号分别是对三星Galaxy Z Fli
金饰价格最高突破1000元/克!上海金ETF(518600)开盘延续涨势,已连续12日获资金布局,冲击5连涨
【国际金价续创历史新高,金饰价格突破1000元/克】消息面上,受国际金价继续上涨影响,国内各金饰品牌挂牌价格也随之攀升至历史
手机拍摄屏幕时条纹的问题与解决:揭秘摩尔纹现象及拍摄技巧手机拍电脑屏幕有条纹怎么解决「手机拍摄屏幕时条纹的问题与解决:揭秘摩尔纹现象及拍摄技巧」
在现代智能手机普及的今天,拍摄屏幕内容已经成为许多用户日常生活中的一部分。然而,在这一过程中,时常会出现一现象:拍摄的照
“全球新一代豪华中大型电混轿车”推动“豪华平权”
4月10日,“全球新一代豪华中大型电混轿车”星耀8启动预售。新车推出搭载雷神EM-P超级电混和雷神EM-i超级电混的双动力版本,共计
苹果手机应用宝在哪里苹果手机下载应用宝「苹果手机应用宝在哪里」
对于许多苹果手机用户来说,应用宝这款应用商店并不陌生。作为腾讯旗下的手机应用商店,应用宝以其丰富的应用资源和便捷的下载方
倒班排班助手排班软件手机版「倒班排班助手」
倒班排班助手app方便用户的工作管理非常的适合哪些工作需要轮班的人员,一键的设置非常的便捷,自定义班次,还可以便捷的进行备