前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于数据库Prepare返回指针的的问题

关于数据库Prepare返回指针的的问题

作者头像
李海彬
发布2018-03-21 17:38:32
1.1K0
发布2018-03-21 17:38:32
举报
文章被收录于专栏:Golang语言社区

先写问题,代码在下面。 写入数据库可以这么写:

代码语言:javascript
复制
stmt,err:=db.Prepare(`insert into user_tb(userid,userNo) values (?,?)`) //要写入的userid和userNo都是int型。

然后就是:

代码语言:javascript
复制
stmt.exec(1,2)//分别把1和2写给userid和userNo两个值。

在同一个func里面这样写可以成功执行。 但是如果把prepare和exec分开就会报错,在exec那里报错。 怎么分开的: 先定义type:

代码语言:javascript
复制
type Mssql struct {*sql.DBdataSource stringdatabase   stringwindows    boolsa         SAstmt       *sql.Stmt //作为成员数据}

然后写F1来执行prepare:

代码语言:javascript
复制
func (db *Mssql)F1(){      db.stmt, _= db.Prepare(`insert into user_tb(userid,userNo) values (?,?)`)      //这里把prepare返回的【*sql.Stmt】指针写给db的成员数据}

接下来用F2来做exec:

代码语言:javascript
复制
func (db *Mssql) F2(){     db.stmt.exec(1,2)//编译不会报错,执行报错。}

然后是main:

代码语言:javascript
复制
func main(){  var db Mssql db.open(巴拉巴拉)defer db.close()db.F1() //这里执行prepare,赋值给成员数据的stmtdb.F2() //这里执行exec,但是出错了,执行的时候发现db.stmt已经是空的了?}

问题就是,db.prepare()返回的是一个指针,是不是这个语句所在函数执行完毕之后就会把指针所在的地址释放掉?所以造成后面想用的时候就出错了?如果是的话怎样才能让stmt成功传递呢?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档