00:00
昨天我们讲到了这个操作数据库啊,就讲了一个增删改啊,我们再来看一下,首先是这个我们用的包也是用的酷啊,是这个database circle这个包下的。这个驱动呢,因为go没有提供这个官方的一个驱动,所以呢,我们这个自己下载的这个驱动啊,我下载从get up上面下载一个驱动,连麦circleq的也发给大家了,那这个呃,获取链接这一块呢,用我们circleq包的一个函数是open里边传一下要连的数据库,同时呢,传一下那个数据源,就是这个我们的URL啊这的URL,这个URL的格式再说一下,呃,前面呢是用户名,然后呢冒号,后边是这个密码。密码,如果你要连本机的话呢,后边这个TCP log house和3306啊,可以省略,可以省略不写,如果要连这个其他部分,需要把这个加上括号里边写这个其他动西的一个IP地址,包括它的端括号,这是这一块啊,这个格式呢,不要写错了,写错之后呢,就连不上了啊,还有一点就是个open的调open的时候它并不是直接就拿链接了啊这个。
01:09
哎,它是一个色Q,哎,就是操作数据库的一个句柄啊,一个操作数据库的一个句柄,并不是真正的拿这个链接啊,等我们这个需要的时候,哎,这个操作数据库时候才会拿这个链接,那这个呃,调这个方法呢,包括后边我们调那个P方法,就是为了检测一下你写的后边这个数据源里边有没有检测它里边这个参数啊,有没有问题。这个另外呢,我们这个写的这个增删改的方法啊,我们把它打开啊,增删改这一块呢,你有两种方式啊,第一种是带于编译的,嗯,第二种呢,是不带于编译的,直接执行的待于编译的这块调度方法,这个其实呢,我们就调了三个方法,一个是prepare,一个是这个,嗯,Q就是这个啊执行的那个意思啊,还有一个是什么呢。还有个是哪个呀。哎,就这两个是吧,哎就这两个啊,就这两个,哎一个是哎一个是它,哎一个是这个预编译,但是呢,这个调它的时候注意啊,如果你要预编译的话呢,是用这个DB,诶这个我们我们自己写的那个啊呃,这个找到这个DB调这个普pair尔,然后它这个返回值呢,不一样,这个看不到官方文档嘛啊。
02:19
来点开它,我们找到这个DB。第笔这个结构来往下翻,下边呢,哎找到我们这个呃谱仪篇二,哎,如果你这个呃写完词口句呢,由于编译它呢调这个普鱼片方法啊捕鱼片这个方法调完之后呢,返回这个类型是这个STMT这个结构啊,它下边呢也有这个自行的删改呃查询所有或者查询一行查询行它下边也有这个方法,只是呢这个呃里边的传的这个参数,哎不一样,如果你这个先预编译呃最后呢得到的是这个呃STMD这个结构,得到它之后呢,在执行的话,里边只需要填充这个障碍符就可以了,因为你写字库语录那里边有障碍符,直接这个填充账户就可以了,哎包括下边的也一样啊查询还有查询银行都是直接填充这个账位符务,那如果我们这个,呃,不把这个预编译这一步呢,给它省掉,我们直接执行的话,我们也是按调这个DB的一个。
03:15
这个,哎。的方法在哪啊,在这啊调这个方法,那这个时候呢,哎,就就需要这个什么DB的方法啊。DB的里边是传这个四口句,再传这个站位符,就直接一次性就传进去了,哎传一下这个四口句,哎传一下四口句里边那个站位符,哎这个数呢啊就能这个执行这个增删改这个命令了啊增删给命令了,好这块呢说了啊不返回任何结果,所以呢,我们写的呢,直接把这个result就以一个下划线这个代替了,所以啊就是这块,昨天我们又讲了一个这个呃增删改啊那下面呢,我们来说这个查询一条记录,以及查询所有记录,就是用下边这个方法,也是query,肉也是query。那我们写下边的时候就直接就呃把那个预编译那一步呢,就那个就不写了啊,直接就掉DB里边的一个query或que的方法了,好首先呢,我们来说查询一条记录,我们打开我们的数据库啊,我们看一下昨天呢,我们插入了两条数据,一个是adin,一个是admi,二。
04:17
是in to,那我们这个,嗯,来先查询一条,比如我们查询ID等于,哎,等于这个一的这一条in。好啊,我们来在这个user里边呢,我们再来写一个方法。写一个get get一个。By ID好,哎,这个根据这个用户的这个ID。从这个数据库中查询特。好。牛的。有的。
05:00
Get一个user的。YID,好,那这我们要返回一个什么呢?返回,为啥呀?你返回一个user吧,对吧,哎,返回U,然后呢,我们再返回一个error啊,所以呢,多个返回值。好,就是这个啊,同样啊,首先呢,我们需要写这个四口句。查询的一个circle口句circle s就等于select ID。User name。Pass。Email。From users where ID等于问号,好,哎,就是这个circle语句,那下面呢,哎,第二我们就直接执行了。执行用这个,嗯,Us。点一个DB点一个。
06:01
哎,不是用它了,因为我们现在要查询对吧,那个呢是执行什么呀,增删改对吧,增删改现在我们要查询啊,所以呢调这个query。快re肉们查询一条啊,查询一条,这个呢,我们再来看一下这两个方法的区别啊,快re肉呢,呃,这块这个执行一次查询,并期望返回最多一行,结果也就这块呢,我最多就返回一行,那就意味着那我这个即使你要查多条的话啊,没有那个,呃这个比如没有后边的ID,它也只能返回这个一条啊返回一条,所以呢,我们用它来比如获取一个元素啊,获取一个这个结构的候,我要返回一个U的时候啊,我们就用这个快肉下边这个。哎,Query哎,这个这个时候呢,它能返回多行结果,多行结个,所以呢,这一看这个主持人你就明白啊,这个呢应该是比如查询一条,这个呢可能查询多条,对啊,我们用它,然后最后呢,返回这个值啊是这个肉肉这个结构,那肉结构返回完之后呢,诶这个我们需要这个调一下片,这个就扫描一下下边的结果呢,比如要保存到。
07:02
读到里边的这个字段里边呢,只是我们保存到保存复给某一个变量,然后我们再创建那个结构来结构体实例,把那些这个值给它附去就可以了,啊好,我们来这个快肉。里边呢,把这个色口句传进去。哎,下面呢,就是全穿这个哎展位服了,那我们应该用user点一个。ID哎,我们就不写死了啊,啊不跟这个昨天插入这个用户一样了,插入用户呢,我之之所以这个写死呢啊,是为了这个我们在数据库里边啊,保存不一样的那个用户啊,所以呢,我在这写死了啊,那现在呢,我们就从你这个将来测试它的时候呢,那个调这个方法的那个user那个实例里边来得到这个ID了。好,那得到它之后呢,注意啊,它返回一个肉,返回一个肉,所以呢,我们来写一个肉。等于它那再往下干什么的呢?诶得到这个肉,得到这一行之后呢,我们需要调一下那个SC,哎,就是来这个把每一个字段下面这个值呢给拿到,那拿到之后呢,我需要付给哎付给一个变量,所以呢,我下边就要创建我的声明啊。
08:10
这个我们看一下啊,下边呢,有这个ID name passd和email,诶所以呢,诶我们可以这个。哎,声明这几个,呃变量啊,声明几个变量,一个这个user。内幕。玩一个pass视频玩一个。整一个这个email。哎,那再往下就是我调那个SC方法,把那个每个字段里边那个值呢,给读到,读到我上面生面的三个这个变量里边啊,三个变量里边。好,来我们这个用这个肉点一个膝盖。第一个。这里边啊,这里边可以传多个啊,传多个前面呢,有一个挨着,我们把这个先整上啊,等于一个它。
09:03
好。按照哎这一块呢,哎这样啊,我把这个。ID。Idea。玩一个这个。ID,我们的ID是int类型对吧。ID,第二个and一个username。第三个。它是word。第四个。啊的一个email,好,这是这个啊,用这个肉呢,调一下这个SKYSKY就是我们这个文档上面这块啊调一下它,调下它呢,它会将这个该行查询结果各列分别保存进这个参数指定的一个值中,那我们现在呢,就指定了四个啊,指定一个ID,一个last name email,还有一个这个password,把它给读到这个,把那个值啊给。
10:06
付给我们指定的几个变量,好哎,那这个读完呢,有可能有这个A,所以呢,我们来写一个啊,If这个either。如果它不等于。然后呢,我们这一块,哎。一下。变成一个new,然后呢,挨着。好,哎,这是这个啊,这是这个,呃,我们读这个值,那读完之后下面有这四个值呢,有了值之后呢,我们需要有一个user了,需要有一个user结构体了,所以呢,我们来。来写一个U。就等于and。我们的这个很优的。好,另一边呢,哎,给它赋值。ID。ID。You name。Name。
11:01
Password。啊。Email。Email。好哎,有了这个U,那UR这个把那个值,呃,这个有了这个U的这个结构体实例之后呢,我们就可以返回了啊,就可以返回了,返回一个U的,然后返回一个钮就可以了。好,就是这个啊,就是这个少一个逗号。阿森。好,哎,这是我们这个查询,呃,从数据库里边呢,查询一条记录,查询一条记录,最后呢,我们得到了一个这个U点的一个结构体,一个实例,好啊,那这个写完之后呢,同样我们来测一下啊,看从数据库里边呢,哎,我能不能哎查询出来这个呃,一个U的。来,我们找到我们的user test,我们在这里边呢,哎,来再写一个子测试函数,写一个get。Used by ED。
12:01
T。点一个T。好,我们在这呢,哎,打印一句话。什么呢?哎,查询。嗯,一条记录的这个子测试。函数之心。这样吧,直接写什么呢?测试查询一条记录。好,下面我们就需要来测我们刚刚写的那个方法了,那我们这个方法里边呢,需要有一个ID,所以呢,我们在这块呢,来整一个U的。等于这个U的。哎,里边需要有一个ID。ID为他整个团啊。ID等于一,ID等于一,因为我数据库里边啊,现在有这个。
13:06
我的什么类型的?ID是这个大写的啊好哎,有了它之后呢,我们来调用调用这个获取。过去这个user的这个。好吧。一个。ID。哎,得到呢,一个UU。等于。好哎,得到得到这个U之后呢。我们来这个打印一下它啊。
14:02
点一个。闻的来,哎,这个。得到的这个nu的的这个信息是好,我们来逗号U。好的好,下面啊,我们来测一下看看根据这个呃,一就是根据ID等于一的这个,根据这个ID等于一的这个值啊,看能不能从输出里边呢,把我们这个输出里边的第一条记录给他这个查出来,得到一个U的啊,我们来测试一下。那这个呢,哎,这个我们煮掉了这块呢,我直接测试这个。再写一个吧。把上面这个也除掉了啊,上面这个除掉了,这个我们不测试添加了,我们来测试这个获取获取用户。获取用户,那这关是test的一个get user by ID,好,我们测下面这个方法,好,测试开始,好,上面的都不用动了啊,好,我们来测试一下。
15:04
这一块呢,这个我们给他把这个写一下。写个注释啊,这是测试获取一个。一会我们还要获取所有的啊,好,哎,来。这块。啊,说我这个ID啊,我这个ID,他要他要要求我这个。大写,哎,腰椎我大写好啊,那就这样了啊。那这个也得改一下,改一下,所以这个。要求还挺多是吧。其实这个时候已经没错了啊,就是有一个有一个有一个线看着不是很舒服对吧,所以呢,这个我们就把它给这个稍微的改一下啊。来,我们测试一下go test,看能不能拿到啊。
16:04
嗯。好,诶来这个,诶我们发现我们拿到的是一个空的对吧?呃,测试查询一条记录,诶没有拿到这个U,我们来看一下啊,怎么回事啊。Get。表名写错了。User。User。Select ID you name from you。表名写错了。Users users好啊,看这一块啊,写这个circle语句啊,写的时候写写错了啊写错了。哎,那这个呢也一样,他这个要求我把这个ID大写是吧,不大写的这块。IID。那对啊,这个这个有点大写,哎,这个其实不大写也行,但是我我我有时候就感觉啊,这个提示有些提示还是不提示为好,对吧,这个一提示,哎,有时候他给你本来没错没错,但是我就我也有强迫症啊,我不知道大家有没有强迫症,我就看着那个线呢,虽然不是错误,我就看中那线不舒服。
17:20
所以呢,这个总想把这个线给它去掉啊,给它去掉好了啊,那这块呢,改完之后呢,这个也得改。这个应该得大写了对吧?哎,这个也大写了啊,其他的都没问题了啊,刚刚呢,没有查到啊,我们这个四口句写错了,来我们再来一次。Good。诶来看诶得到了这个U的情形,1IN123456IN at good.com哎没问题,我们查到了对吧?哎这是第一条啊第一条查到了就是这个查询一条查询一条,那我们也可以呢,诶查询多条,比如们呢,我这个输据库里边假如有好多,嗯,我这个只是呢调的方法不一样,查询一个呢,哎是调这个que肉啊查询这个多个呢,调que肉方法,然后呢,现在啊,我们把下面那个呢也也给大家。
18:10
写了啊,找到我们的这个user,哎,再写一个。哎呀,获取所有的。呃,数据库里边所有的这个记录。Get一个USER4。获取什么呢?哎,数据库中所有的这个记录。哎。User。好,哎,Get一个。Get一个优字。那这个我的返回值应该是什么呀?前面的反位应该是什么呀?切边哎对切边哎切边哎哎中国。还行,比如这个有的。
19:01
优的一个贴片这个。好,那同样啊,在这呢,写四口语句。因为多个嘛,对吧,哎有多条,所以呢,我里边放了这个切片,里边放了好多优点,好多U点,那这个S具呢,跟上面的一样,所以呢,我就把上面的粘一下了,嗯,Select它只是没有什么呀。没有where对吧?From user查询作用嘛,查询作用,所以把这个粘过来了啊,没有where好,有了circle之后呢,下边哎,我们直接来执行了,用这个U。点一个DB点一个。Query,哎,Query哎,调这个query方法啊,不如query肉了,同样把circle口L域这个传进去,哎,那后边呢,就没有了啊,就没有了,因为没有这个占位符了,哎,没有占位符了,好,那这块呢,诶,它得到的是一个这个Rose Rose还有一个either,那我们这块啊,来这个Rose。
20:06
等于它好啊,下面呢,我们可以写一个啊一。A不等于呢?我们确认一下。好,当然你大家可以也可以打印一下啊,也可以打印一下,我这就不打印了啊,那再往下,哎注意了,这个呢,查询多行也就是查询多条记录跟查询一个一条呢有一个区别,查询一条我这个得到肉之后,是不是直接就SC了,对吧,直接就掉这个函数了啊直接掉掉这个方法了,哎,但是呢,你这个呃,查询多行的时候呢,下边因为有好多,所以呢,你需要调另外一个方法是next。我们昨天也看到了啊,得到Rose之后呢,我们往下翻。下边有个next next准备这个方法啊干什么呢?准备用于干方法的这个下一行结果,也就是你这个扫描的话,是不是得扫好多行啊对吧?哎,这个一条的话就那就那一行啊,那现在那有好多行,所以呢,这时你调一下这个方法啊,如果成功返回帧,哎,如果没有下一行会出现错误返回这个假哎这是这个哎它返回一个不尔零的值,那也就是说我要有一个负循环,是不是变利了对吧?负循环诶一行一行的进行扫描啊,进行扫描,所以呢,下面我们来诶写一个。
21:17
写一个for什么呢?Rose点一个next next,如果它是true,嗯,就一直执行这个for对吧,一直for,诶一直让他扫,诶一直让它往下插,一直让它往下插啊然后在这里边呢,啊,我这个同样跟上边的就一样了啊我需要干什么呢?定义这个。声命变量啊,然后这一堆都一样了啊,我直接把它拿过来了,诶CTRLC,因为里边跟这个扫描大行的就一样,在风循环里边了,哎风向里边啊,所以呢,我把这个就直接粘过来了啊不再写了,好粘过来哎,声明ID哎什么road这个是。Rose死了,哎,Task sc一个一个扫描好,那扫描完之后,呃,注意了。我这个最后呢,返回的是一个切片,我是不是得在复循环外边创建一个这个切片啊,诶对吧,所以啊在这呢,诶来什么呢?诶创建这个切片,创建user。
22:13
欺骗。好来玩一个这一个什么呢。那个叫做user。哎,什么类型的,哎这个。U的好,哎,创建一个它,创建个它之后,注意了在复循环这块,我每次这个有了一个U的之后,我是不是得往切片里边添加一个它。诶,对吧,好,那这个时候调灯的方法还记得吗?对,哎,USER4等于user点一个。Openend的里边还是U点四,哎,第二个是。诶,对吧。End。啊对对对啊,不用不用这个user啊,直接这个openendend里边是这个user,然后后边是U对吧,后边是U啊就是这个啊这个每次扫描完之后呢,有了这个U的之后呢,我们需要把它加到这个切片里边啊,加到这个切片里边好啊,那经过这个复用完之后,里边就这个有两条了,那这个里边就有两个这个U道了,所以呢,我最终我们把这个切表进行返回就可以了,所以呢,哎,来最后我们来调整一下。
23:22
U点四,然后呢扭保存好。RETURN。RTN。哎,这是我们这个啊,查询这个获取数据库里边所有的记录,也就说白了就是查询所有的这个员工的啊,查询所有用户的,查询所有用户的,好,哎,那这个呢,方法我们也写完了,同样哎,我们来测试一下,看看有没有问题。来,在这再写一个测试。获取什么的,所有这个有的。一个get,一个user。
24:04
T。点一个T。好来,我们打印一句话啊,这样一个来。我们的,诶测试查询。所有记录。好,哎。下一个呢,哎,我们来一个user。有的。整个取证啊。地址啊。好,下面来调用。或许。所有这个user的这个方法,User第二。
25:00
Get一个U点四。返回一个这个,诶。U吧US了啊。第二个错误呢,我们就不要了,等于它。好,那拿到它之后呢,下边下边该干啥了,是不是该这个。该便利了呀。对吧。这不是个切片吗?对吧,哎,切片,然后下面呢,我们来这个便利啊变利。什么便利切片呢?Four。Range。U,那个前面这个不是不用写了吗?我们不要这个T或者要也行啊KV。点一个。
26:02
US。对,Us us点。好,那我们在这呢,来打印一下啊,点一个print来。好,我们写一下什么呢?第一个第一个这个哎,用户是。那这样我们得用这个F。那个格式化那个打印。FF第一个用户是。什么DD,这是D100分号,D的用户是。M号V。百分号V都百分号V不就行了吗。可以吧,哎,第多少个用户是是什么啊,然后后边呢,后边逗号这应该是K加一。
27:07
K加一吧,因为这个K是不是从零开始的呀,对吧?哎,所以这块啊,K加一这块,其实你不这样也行啊,不这样也行,我们就是为了看第几个什么是什么什么第几个是什么啊啊。然后后边呢,哎,就是这个V了,当然了,你不这样写也行啊,也没问题啊好咱们这块。怎么了?啊,换行。不换行也行嘛。在里边写个感恩就行了是吧。嗯。这个斜杠是吧,来啊,这个我们现在呢,测试一下,哎,查询所有的查询所有的这个user,查询所有user,然后我们最后呢,哎来看一下啊,我们把这个呢上面呢也改一下。
28:07
在这块我们再来复制一个。主调来test get you的。好啊,我们只测看好来,现在呢,我们来。测试一下,我把这清一下啊。Go test。哎,来看,哎第一个用户是哎这个。IN123456,哎第二个IN2666IN2好没问题啊,这是这个我们查询所有的啊,查询所有的这个第一个啊,这个查询一条诶用的是这个query,诶query肉那个方法,那个查询这个所有的呢是用的是query,另外呢,查询所有这块啊,这个得到这个它的返回值啊,第一个呢是得返含一个Rose,然后第二个返回Rose之后呢,需要我们这个有一个for循环,然后呢用Rose呢调一下next,然后就是让它往下一行一行的继续扫描啊,所以这一块这个要注意啊,好,那下面啊,你把这个呢查询一条啊,还有查询所有的呢,诶你把它给写一下啊。
我来说两句