当前位置:首页 > 娱乐

rows Golang学习笔记之Golang与Mysql交互

原作者:学生黄哲

Go标准库中没有数据库驱动程序。第三方驱动见http://golang.org/s/sqldrivers。

这里选择Go-MySQL-Driver。地址是:https://github.com/go-sql-driver/mysql/.

装置:goget github.com/go-sql-driver/mysql

官方数据库/sql包文档:https://studygolang.com/pkgdoc

关于MySQL的基本操作,你可以看看我的另一本简书:https://www.jianshu.com/p/2e01f4c6b626

使用的数据库定义如下

首先,打开数据库

功能原型

函数打开(驱动名称,数据源名称字符串)(*数据库,错误)

Open打开一个由dirverName指定的数据库,dataSourceName指定数据源,一般至少包括数据库文件名和(可能的)连接信息。

1//步骤:以帐户名:密码@/数据库名的格式打开数据库?编码类型

2db,err := sql。Open( "mysql "," root:123@/mydb?charset=utf8”)

3iferr!=零{

4fmt。Println(err)

5}

6//关闭数据库

7延期b。关闭()

二、查询数据

功能原型

函数(数据库*数据库)查询(查询字符串,参数...接口{ })(*行,错误)

查询执行一个查询并返回多行结果(行),这通常用于执行select命令。参数args表示查询中的占位符参数。

1varid int

2字母字符串

3可变价格浮动64

4//查询数据,指定字段名,返回sql。行结果集

5行,err := db。查询(“从产品中选择标识、名称、价格”)

6iferr!=零{

7fmt。Println(err)

8}

9借出。Next() {

10排。扫描(& ampid,amp。名称,&。价格)

11fmt。Println(id、名称、价格)

12}

13个错误。关闭()

行。next()迭代查询数据。

Rows.scan()读取每行的值

Rows.close()关闭查询

第三,查询一行数据

功能原型

func (db *DB) QueryRow(查询字符串,参数...接口{ })*行

QueryRow执行一次查询,最多返回一行结果(即第行)。QueryRow总是返回一个非零值,并且在调用返回该值的Scan方法之前不会返回延迟错误。

1//查询数据可以使用和来限定多个条件,或或(或)

2 row 3:= db。query row(" selected,nameFROMproduct WHEREid=?还是大米之类的?”, 1,1.11)

3//row 3:= db。query row(" selected,namefromproduct,其中id= 1 ")

4行3。扫描(& ampid,amp。名称)

5fmt。Println(id,名称)

第四,插入一行数据

功能原型

func (s *Stmt) Exec(args...接口{})(结果,错误)

Exec使用提供的参数来执行准备好的命令状态,并返回状态执行结果的摘要。

1//插入数据

2ret,_ := db。Exec(" insertintoproduct( id,name,price)值(15,' dog ',30)")

3/3//LastInsertId返回数据库生成的响应命令的整数。

4//返回插入的标识

5insID,_ := ret。LastInsertId()

6fmt。Println(insID)

由ret插入的ID。lastinstid()

受ret影响的行数。rowsaffected()

动词 (verb的缩写)数据修订

1//更新数据和修改id >:第1行的名称

2ret2,_ := db。exec(" update product set name = ' 000 '其中id >为。?", 1)

3//得到影响数

4aff_nums,_ := ret2。RowsAffected()

5fmt。Println(aff_nums)

不及物动词删除数据

1//删除数据,删除id=3的行

2ret3,_ := db。exec(" delete from product where id =?",3)

3delNums,_ := ret3。RowsAffected()

4fmt。Println(delNums)

七.预处理

功能原型

函数(数据库*数据库)准备(查询字符串)(*Stmt,错误)

准备为后续的查询和命令创建一个准备好的状态。返回值可以同时执行多个查询和命令。

1//预处理

2stmt,_ := db。准备(" selectid,namefromproduct whereid=?orname=?")

3//找到id为3或姓名为000的人

4row4,_ := stmt。查询(3,“000”)

5//注意,这需要Next(),否则无法获得任何值。

6代表第4行。Next() {

7行4。扫描(& ampid,amp。名称)

8fmt。Println(id,名称)

9}

10//预处理插入数据

11stmt2,_ := db。准备("插入产品(名称、id、价格)值(?,?,null)")

12//名字是lisi,id是22

13rows5,_ := stmt2。Exec("lisi ",22)

14fmt。Println(第5行。RowsAffected())

15

八.交易处理

功能原型

func (db *DB) Begin() (*Tx,错误)

开始交易。隔离级别由数据库驱动程序决定。

1//未结交易

2tx,_ := db。开始()

3//id为1的价格+1和id为2的价格-1

4ret4,_ := tx。Exec("更新产品集价格=价格+ 1,其中id =?", 1)

5ret5,_ := tx。Exec("更新产品集价格= price - 1,其中id =?", 2)

7//如果id不存在,受影响的行数为0

8//接收受影响的行数。如果为0,它将失败

9updNums1,_ := ret4。RowsAffected()

10updNums2,_ := ret5。RowsAffected()

11ifupdNums1 >0 & amp& ampupdNums2 >0{ //只有两个更新同时成功,才会提交

12tx . submit()//提交交易

13fmt。Println(“成功”)

14}否则{ //否则回滚

15tx。Rollback() //回滚事务

16fmt。打印(“失败”)

17}

Tx.submit()提交事务

Tx.rollback()回滚事务

演示

1打包管理

2导入(

3 "数据库/sql "

4"fmt "

6 _ " github . com/go-SQL-driver/MySQL "

7)

8typedbWorker结构{

9dsn字符串

10db *sql。分贝

11用户信息用户tb

12}

13typeusertb结构{

14id int

15//NullString表示可空字符串。

16name sql。空串

17//NullInt64表示可空的浮点值。

18price sql。NullFloat64

19}

20funcmain(){

21varerr错误

22//初始化结构并保存数据库参数

23 dbw:= DBWork {

24 DSN:“root:123 @/mydb?charset=utf8 ",

25}

26//打开数据库并将其保存到结构中的db

27dbw.db,err = sql。Open( "mysql ",dbw.dsn)

28//如果打开失败,紧急出口

29iferr!=零{

30恐慌(错误)

31}

32//关闭数据库

33deferdbw.db.Close()

34//插入数据

35dbw.insertData()

36//获取数据

37 dbw . query data()

38}

39

40//创建方法,插入数据

41 func(dbw * DbWorker)insert data(){

42//预处理,插入数据

43stmt,_:= dbw . db . prepare(` INSERT INTO product(name,id,price) VALUES(?,null,?)`)

44//功能执行完毕并关闭

45延期。关闭()

46//插入数据

47ret,err := stmt。Exec( "hz ",29)

48iferr!=零{

49毫米。Println(err)

50返回

51}

52//获取id,执行成功,打印

53ifLastInsertId,err := ret。lastInsertId();err == nil{

54fmt。Println( "LastInsertId:",LastInsertId)

55}

56//获取行号,执行成功,打印

57ifRowsAffected,err := ret。RowsAffected();err == nil{

58fmt。Println( "RowsAffected:",RowsAffected)

59}

60}

61

62//初始化用户信息

63 func(dbw * DBWorker)query data Plare(){

64dbw.userInfo = usertb{}

65}

66 func(dbw * DBWorker)query data(){

67

68//预处理,查询数据

69stmt,_:= dbw . db . prepare(` select * From product where price & gt;= ?和价格& lt?`)

70

71deferstmt。关闭()

七十二

73 dbw . query datatre()

74//取价格20到30之间的数据

75行,err := stmt。查询(20,30)

76延期。关闭()

77iferr!=零{

78fmt。Println(err)

79返回

80}

81forrows。Next(){

82//检索数据库数据

83路。扫描(& ampdbw.userInfo.id,& ampdbw.userInfo.name,& ampdbw.userInfo.price)

84iferr!=零{

85fmt。Println(err。Error())

86继续

87}

88//如果检索到的数据为空,则赋值0

89if!dbw.userInfo.name.Valid{

90dbw.userInfo.name.String = " "

91}

92if!dbw.userInfo.price.Valid{

93 dbw . userinfo . price . float 64 = 0.00

94}

95fmt。Println( "get data,id:",dbw.userInfo.id," name:",dbw.userInfo.name.String," price ",float 64(dbw . userinfo . price . float 64))

96}

97err =行。Err()

98iferr!=零{

99fmt。Printf(err。Error())

100}

101}

版权声明:内容来自网络,版权归原创作者。除非我们无法确认,否则我们将标记作者和来源。如有侵权,请告知,我们会立即删除并道歉。谢谢你。

ID:Golangweb

www.bytedancing.com

1.《rows Golang学习笔记之Golang与Mysql交互》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《rows Golang学习笔记之Golang与Mysql交互》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/yule/1037902.html

上一篇

老公们的私房钱代驾是哪一集

下一篇

同窗生在哪看

天然气价飙涨 发改委紧急开会称会平抑价格

天然气价飙涨 发改委紧急开会称会平抑价格

随着今年冬天供暖季节的到来,天然气紧急情况的消息被频繁报道。 《湖北日报》报道称,自11月22日以来,该省天然气一直短缺。此前,类似的消息来自宁夏、陕西等地。《陕西日报》报道称,该省冬季采暖期天然气需求增加,供需缺口扩大,...

多地天然气价飙涨 发改委开告诫会平抑价格

面对液化天然气价格的快速上涨,国家发改委要求11个地区于12月4日召开催收会议,并报送国家发改委价格监管局。 随着今年冬天供暖季节的到来,天然气紧急情况的消息被频繁报道。 《湖北日报》报道称,自11月22日以来,该省天然气...

中国南海部分岛礁标准名称公布 事情经过真相揭秘!

中国南海部分岛礁标准名称公布 事情经过真相揭秘!

据民政部官方微信微信官方账号消息:为了进一步规范地名的使用,现公布南海部分岛礁和海底地理实体的标准名称。1983年4月中国地名委员会授权的《南海部分岛屿标准地名》仍然有效。邀请社会各界规范使用已公布的标准名称。一、岛礁标准...

华为畅享9价格 华为畅享9评测,高配低价还有谁?畅享8无地自容,价格狂降!

  • 华为畅享9价格 华为畅享9评测,高配低价还有谁?畅享8无地自容,价格狂降!
  • 华为畅享9价格 华为畅享9评测,高配低价还有谁?畅享8无地自容,价格狂降!
  • 华为畅享9价格 华为畅享9评测,高配低价还有谁?畅享8无地自容,价格狂降!

山西玉安温泉门票价格 大同玉安温泉 + 戏雪一日游

早早在指定地点集合,乘车至大同市裕安景区(车程2.5小时),到达后行动自如!裕安生态度假岛位于大同市东北部,距市区45公里,距阳高县15公里。到了之后,雪园可以自由活动,刺激雪圈、空空中雪圈、怀旧冰车、雪轮等十多个项目!参观2小时左右,办理进入温泉公园手续。进入公园后,温泉区可以自由活动,享...

首个新冠疫苗动物实验数据出炉 真相到底是怎样的?

首个新冠疫苗动物实验数据出炉 真相到底是怎样的?

来自国内两个机构的SARS-CoV-2灭活疫苗已进入一期临床试验阶段。它们的有效性和安全性如何?4月20日,中国医学科学院秦川团队带领的团队在预印纸平台bioRxiv上上传研究文章。这是迄今公开报道的首例SARS-CoV-...

iquit iPhone手机怎么迁移iCloud数据并退出iCloud账户?

  • iquit iPhone手机怎么迁移iCloud数据并退出iCloud账户?
  • iquit iPhone手机怎么迁移iCloud数据并退出iCloud账户?
  • iquit iPhone手机怎么迁移iCloud数据并退出iCloud账户?

社会调查报告 90后数据调研报告

  • 社会调查报告 90后数据调研报告
  • 社会调查报告 90后数据调研报告
  • 社会调查报告 90后数据调研报告