游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

Go学习(二十五)操作MYSQL,实现CRUD

  1。介绍
  Go官方提供了database包,database包下有sqldriver。该包用来定义操作数据库的接口,这保证了无论使用哪种数据库,操作方式都是相同的。但Go官方并没有提供连接数据库的driver,如果要操作数据库,还需要第三方的driver包。2。下载安装驱动
  gosqldriver驱动源码地址:https:github。comgosqldrivermysql2。1安装驱动gogetugithub。comgosqldrivermysql3。匿名导入
  通常来说,导入包后就能调用该包中的数据和方法。但是对于数据库操作来说,不应该直接使用导入驱动包所提供的方法,而应该使用sql。DB对象所提供的统一的方法。因此在导入MySQL驱动时,使用了匿名导入包的方式。
  匿名导入包:只导入包但是不使用包内的类型和数据,使用匿名的方式:在包路径前添加下画线import(github。comgosqldrivermysql)
  在导入一个数据库驱动后,该驱动会自行初始化并注册到Go的databasesql上下文中,这样就可以通过databasesql包所提供的方法来访问数据库了。4。连接数据库4。1连接方法
  使用sql包中的Open()函数来连接数据库。Open(driverName,dataSourceNamestring)(DB,error)driverName:使用的驱动名,如mysql。(注册到databasesql时所使用的名字)dataSourceName:数据库连接信息,格式:〔用户名:密码tcp(IP:port)数据库?charsetutf8〕,例如:root:123456tcp(127。0。0。1:3306)test?charsetutf84。2sql。DB作用sql。Open()返回的sql。DB对象是Goroutine并发安全的。sql。DB通过数据库驱动为开发者提供管理底层数据库连接的打开和关闭操作。sql。DB帮助开发者管理数据库连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果开发者没有把连接释放回连接池,会导致过多连接使系统资源耗尽。4。3sql。DB设计目标
  sql。DB的设计目标就是作为长连接(一次连接多次数据交互)使用,不宜频繁开关。比较好的做法是,为每个不同的datastore建一个DB对象,保持这些对象打开。如果需要短连接(一次连接一次数据交互),就把DB作为参数传入function,而不要在function中开关。5。写操作(增、删、改)5。1执行步骤先使用预编译语句(PreparedStatement)来拼接sql。然后调用db。Exec()执行SQL,返回执行结果5。2代码示例packagemainimport(databasesqlfmtgithub。comgosqldrivermysqltime)funcmain(){连接数据库open,err:sql。Open(mysql,root:roottcp(127。0。0。1:3306)test?charsetutf8)checkError(err)插入数据add(open)更新数据update(open)删除数据del(open)}插入数据funcadd(opensql。DB){插入数据prepare,err:open。Prepare(insertusersetusername?,password?,mobile?,createtime?)checkError(err)exec,err:prepare。Exec(李四,123456,17600000000,time。Now()。Unix())checkError(err)id,err:exec。LastInsertId()checkError(err)fmt。Printf(插入数据ID:d,id)}更新funcupdate(opensql。DB){prepare,err:open。Prepare(updateusersetusername?whereid?)checkError(err)exec,err:prepare。Exec(王五,18)checkError(err)rows,err:exec。RowsAffected()checkError(err)fmt。Printf(更新数据成功,影响条数d,rows)}删除数据funcdel(opensql。DB){prepare,err:open。Prepare(deletefromuserwhereid?)checkError(err)exec,err:prepare。Exec(8)checkError(err)rows,err:exec。RowsAffected()checkError(err)fmt。Printf(删除数据成功,影响条数d,rows)}检测错误funccheckError(errerror){iferr!nil{panic(操作失败:err。Error())}}6。读操作(查询)6。1执行步骤1。查询多条步骤调用db。Query()方法执行SQL语句,返回一个Rows查询结果。将rows。Next()方法的返回值作为for循环的条件,迭代查询数据。在循环中,通过rows。Scan()方法读取每一行数据。调用db。Close()关闭查询。2。查询单条步骤调用db。QueryRow()方法执行SQL语句,返回一个Row查询结果。然后调用row。Scan()读取数据。6。2代码示例packagemainimport(databasesqlfmtgithub。comgosqldrivermysql)funcmain(){连接数据库db,err:sql。Open(mysql,root:roottcp(127。0。0。1:3306)nsbdapp?charsetutf8)checkError(err)查询多条数据rows:queryRows(db)fmt。Printf(多条返回:v,rows)查询单条数据row:queryRow(db)fmt。Printf(单条返回:v,row)}创建表的映射对象typeUserstruct{UidintUserNamestringCreateTimeintBirthdaysql。NullString有的值可能为NULL}查询多条数据funcqueryRows(dbsql。DB)〔〕User{stmt,err:db。Prepare(selectid,username,createtime,birthdayfromnsbduserwhereid?)checkError(err)rows,err:stmt。Query(30)延迟关闭deferrows。Close()checkError(err)user:new(User)users:make(〔〕User,5)varusers〔〕Userforrows。Next(){rows。Scan()方法的参数顺序很重要,必须和查询结果的column相对应(数量和顺序都需要一致)err:rows。Scan(user。Uid,user。UserName,user。CreateTime,user。Birthday)checkError(err)usersappend(users,user)}returnusers}查询单条数据funcqueryRow(dbsql。DB)User{stmt,err:db。Prepare(selectid,username,createtime,birthdayfromnsbduserwhereid?)checkError(err)user:new(User)errstmt。QueryRow(4)。Scan(user。Uid,user。UserName,user。CreateTime,user。Birthday)checkError(err)returnuser}检测错误funccheckError(errerror){iferr!nil{panic(操作失败:err。Error())}}
  输出:多条返回:〔{Uid:1UserName:adminCreateTime:0Birthday:{String:20170415Valid:true}}{Uid:2UserName:u2CreateTime:1605858072Birthday:{String:19930214Valid:true}}{Uid:3UserName:u3CreateTime:1606289644Birthday:{String:19910531Valid:true}}{Uid:4UserName:u4CreateTime:1610521164Birthday:{String:19891124Valid:true}}{Uid:5UserName:u5CreateTime:1610588359Birthday:{String:Valid:false}}〕单条返回:{Uid:4UserName:u4CreateTime:1610521164Birthday:{String:19891124Valid:true}}6。3注意事项rows。Scan()方法的参数顺序很重要,必须和查询结果的column相对应(数量和顺序都需要一致);Go是强类型语言,在查询数据时先定义数据类型,针对字段值为NULL时,数据类型应定义为:sql。NullString、sql。NullInt64等,并可以通过Valid值来判断查询到的值是赋值状态还是未赋值状态。每次db。Query()操作后,都建议调用rows。Close()。rows。Close()操作是幂等操作,即便对已关闭的rows再执行close()也没关系。6。4为什么查询后要关闭连接?
  因为db。Query()会从数据库连接池中获取一个连接,这个底层连接在结果集(rows)未关闭前会被标记为处于繁忙状态。当遍历读到最后一条记录时,会发生一个内部EOF错误,自动调用rows。Close()。但如果出现异常,提前退出循环,rows不会关闭,连接不会回到连接池中,连接也不会关闭,则此连接会一直被占用。因此通常使用deferrows。Close()来确保数据库连接可以正确放回到连接池中。
  微信搜索【猿码记】获取最新文章信息。

猩球崛起3终极之战今日上映凯撒倒下了?但人与动物的如何相处却好莱坞特效大片《猩球崛起》系列的最终章《猩球崛起3:终极之战》今日全国上映。9月14日,我们联合奥斯卡电影院线组织了部分网友观看点映,提前感受凯撒复仇之路带给我们的视觉冲击。……人猿大战,一触即发!猩球崛起3终极之战免费请你看!当猿族与人类的矛盾愈演愈烈,一场终极决战在所难免!小编邀你免费来观战!《猩球崛起3:终极之战》里猿族icon凯撒、反派上校,以及凯撒的老铁们毛里斯、卢卡、火箭等重要卡司逐……淘宝如何使用丰网菜鸟模板打单发货?一、如何开通丰网速运电子面单1、登录淘宝千牛卖家中心点击【物流管理】【电子面单平台】。2、点击【我的服务商】选择【开通新的服务商】选择【顺丰】。3、选择:顺丰……胡巴变身超模乱入纽约时装周百位群星助阵VivienneTam纽约时间9月10日,纽约时装周上演时尚碰撞电影的大戏VivienneTam2018春夏时装秀。知名华裔设计师VivienneTam创造性地将东方奇幻巨制捉妖记系列的电影元素融入……新一代音乐巨人崛起!蜘蛛侠领队编曲JeffKryka天才实力好莱坞科幻动作片《蜘蛛侠:英雄归来》于8日在中国内地火热上映中,该作是十五年来蜘蛛侠首次回归漫威之作,气势恢弘的大场景,惊心动魄的动作场面让影评人早早就将其评为2017最佳超级……电影蜘蛛侠英雄归来四天五亿!网友青少年版死侍好莱坞科幻冒险动作巨制《蜘蛛侠:英雄归来》于9月8日在全国上映后取得了喜人的票房战绩,首周三天狂揽票房4。57亿,在周票房中的占比高达60,力压同档期其他影片,以绝对优势之姿瞬……唐探系列获外媒力赞中国侦探喜剧登上国际舞台由陈思诚编剧执导,王宝强、刘昊然主演的喜剧冒险探案系列电影《唐人街探案2》(下简称《唐探2》)将于2018年2月16日(大年初一)登陆全国各大影院。今日片方发布国际版海报,中西……王牌特工2黄金圈同款裁缝铺伦敦揭幕绅士时尚来袭让你秒变特工近日,好莱坞动作冒险巨制《王牌特工2:黄金圈》导演马修沃恩携夫人著名超模克劳迪娅席弗共同出席影片服装合作品牌的伦敦店活动,梅林饰演者马克斯特朗也一同亮相。值得一提的是,该店铺完……iPhone15Pro有望实现屏下面容识别,三星已在研发相关据报道,苹果明年将推出的iPhone15系列中的高端版本,也即是iPhone15Pro系列,有望采用屏下面容识别技术。有媒体表示,三星旗下的面板制造商三星显示,正在研发新一代的……上海新能源汽车上牌政策又出幺蛾子,4。6米到底是限短还是护短近日有网友爆料,自己在上海买的五菱宏光MINIEV目前已经暂停上牌了,当地正在策划新能源汽车上牌新政,新的政策将在近期落地,届时售价10万以下或车身长度低于4。6米的纯电动汽车……Guava常用的java工具集推荐Guava是一组来自谷歌的核心Java库,包括新的集合类型(如multimap和multiset)、不可变集合、图形库,以及用于并发、IO、哈希、缓存、原语、字符串等的实用工具……保险创新护航产业升级来源:人民网人民日报近日,中国保险行业协会正式发布《新能源汽车商业保险专属条款(2021版行业征求意见稿)》,新能源车主千呼万唤的专属车险有望出台。这一专属条款的发布表明……
樊昊仑我的英雄曝拳套心脏海报讲述女拳击手感人故事日前,由西安华颂影视文化传媒有限公司出品,樊昊仑导演,景珂、连晋领衔主演,巴多、白露娜、霍亚明、彭波等主演的《我的英雄》在7月23日全球曝光首款拳套心脏主题元素的宣传海报。红色……奇幻冒险电影龙牌之谜定档8。16成龙施瓦辛格上演巅峰对决星关系7月23日讯今日,由成龙、施瓦辛格特别主演的电影《龙牌之谜》发布逐光而战版海报,定档8月16日上映。东西方两大顶级动作巨星成龙和施瓦辛格各自活跃在世界影坛多年,有诸多影迷……柔宇9轮融资背后能发出货来吗?是骗局?还是战略?柔宇科技可谓今年争议做多的一家公司,而名声大噪的原因就是去年10月31日高调发布了全球首款可折叠柔性手机,然后本以为是一个默默修炼现在崭露头角的高手,没想到确是一个口技演员,这……烈火英雄福州长沙路演口碑飘红黄晓明演技获消防员及家属大赞星关系7月22日讯20、21日,电影《烈火英雄》在福州、长沙进行全国路演,主演黄晓明及导演陈国辉共同参加。黄晓明凭借扎实精湛的演技,不仅获得了观众与影评人的认可,也得到了广大消……黄晓明烈火英雄演技备受好评被观众肯定最适合出演该片星关系7月22日讯由黄晓明主演的电影《烈火英雄》将于8月1日上映,目前正在全国路演中。19日,在首站深圳场放映后,有观众向本片男主角黄晓明大胆表白,认为黄晓明就是最适合演这部电……黄晓明担任武汉消防公益使者烈火英雄演技获赞再创银幕经典星关系7月19日讯19日,武汉消防官方发布演员黄晓明成为武汉消防第四十五位宣传公益使者,并称赞其是苍茫黑夜里一缕斑驳的光,用一名演员的素养传播着爱与希望。黄晓明在电影《烈……心之山首映情动全场观众为影片点赞直言走心爱情星关系7月19日讯略带苦涩的爱情才更真实。深情入腑,岁月且姑,真实情感,触动内心。当片尾主题曲《心路》缓缓响彻影厅,观影观众平静的内心被最真诚的故事所打动,《心之山》是今年暑期……银河补习班发布主题曲银河里最像的人邓超演绎最感人父子情星关系7月19日讯《银河补习班》发布主题曲《银河里最像的人》邓超演绎最感人父子情近日,电影《银河补习班》主题曲《银河里最像的人》温情发布,一上线就收获了众多听众的好评。歌曲由电……赛尔号7疯狂机器城奥斯卡影城首映口碑爆棚星关系7月18日讯将在8月2日全国上映的动画电影《赛尔号大电影7:疯狂机器城》今天在奥斯卡电影大世界举办了首映观影活动。奥斯卡电影大世界近期全新升级的亲子儿童厅、VIP影厅,为……邓超口碑力作全国公映银河补习班成暑期全家观影首选星关系7月18日讯由邓超和俞白眉共同执导的现实主义教育题材电影《银河补习班》7月18日正式公映!浩瀚太空,航天员意外失联,生命最大的绝境中,他回忆起自己那个最了不起的爸爸,一对……送货到家成空话,消费者只能忍气吞声?绘图:杨佳更多315内容扫码关注南方国务院《快递暂行条例》发布已满一年,时值315国际消费者权益日前后,南方日报记者调查条例实施情况及快递服务质量发现,当前,快递业……银河补习班教育专场引热议专家力赞影片洞察教育本质星关系7月16日讯《银河补习班》像是一份父爱宣言,向孩子们诠释什么是父爱本质,诠释什么是无条件的爱支持,诠释什么是最坚定的信任。感谢两位导演能够在笑声与泪水中告诉我们教育有多么……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网