00:00
好,来看一下咱们这个早测题的需求啊。查询出每个学生的总成绩是吧?每个学生的总成绩。不难呀。每个学生。正好咱给他写的复杂一点啊,写个多点的。简单的这个多表和单表啊,对于JDBC这个代码来说是一样的,没啥区别啊。查询学号。姓名和总成绩。来自于学生表。和成绩表。这两张表的关联条件是学号是吧?2STUDENT。只有聚合,在哪儿分组啊?啊,明确的第一列先把这个搞上啊。不是单组的分组函数是吧。
01:02
个什么来着。这是吧。除了聚合的。别的列。就粘过来。看一下是不是这个结果啊。对吧。最最高分这个排个序,咱们这块。哎,咋了?对吧,呃,那咱排不排序呢?咱也排给他排个序吧,虽然没这个需求嘛,但是还是排上序,写着看着爽是吧。把这个总成绩。D。是不是就这结果啊?好了,来,开始咱们使用JDBC了。你在那种看着不算本事,你得把它搞到加班里边来。好,这样一个类。咱们就叫第一个回顾啊。Test。看行不行啊。
02:03
可以吧?嗯。好嘞,然后呢,在写这个代码之前啊,我就是为了让大家看到方便一点,好吧,其实还是那句话啊,不建议啊不建议好吧,呃,然后呢,咱们接下来要跟数据库打交道,首先引炸包上来。然后这不算上来,还得右键。好嘞,然后在这里边写代码之前,我先把连接的那个方法的类先封装出来哈。那个类呢,在一会儿的别的操作中是不是也会用到,所以咱就直接给他写出来这样一个类。哎。工具包咱们叫做DB类。DB类。OK。在这里边首先呢,声明一个连接对象。Public connection。然后直接来一个方法。
03:03
叫做get connection。什么鬼?这个最好给他一个空是吧,其实这个声明的时候啊,这样也行,但是给人空是最标准的写法。因为它不会占内存空间,这个这么聊简单的说一下啊,就比如说咱们在今后的写代码的过程中,是不是经常会用到字符串变量啊,然后SR又各种重新啊。其实对于程序的优化来说呀,你这样写完成之后在内存上。大家看啊。这个咱说一下这个东西啊,这个以后对大家有帮助啊,你看我这写了两个字符串,这个第一个在内存中,这内存是不是开辟了空间,往里边存了个这这个玩意啊。是不是它占了一个小空间?OK,那str又被一个字符二赋值了。那是不是还是又开了一个空间,里边装的字符串啊?
04:03
只不过在这边的时候,Str这个变量一开始指向了它,现在呢,这个不指向,而指向了另外一块空间啊。对吧,这个应该基础是说过,其实你不管你指向谁,你产生的这两个小空间是不是仍然存在啊。那接下来比如说做了很多很多运算,这样的小空间是不是越来越多?这也是为什么电脑越来越卡,因为这个内存的小空间它占的太多了,内存占的快满了,所以它卡。哎,对于咱们程序优化最好最好的写法怎么办?SR变量你是不是使完了,咱们已经进入到程序的末尾了,咱们可以这样写一下。OK,能理解什么意思不,它会把之前的空间啊,把这个指向为空,它会省一部分的空间,省一部分空间,所以咱们在声明的时候,其实这样没毛病,但是写上指向空,它不会占空间,不会浪费性能。
05:08
所以这个是一个程序优化的一个东西啊,虽然说对咱们来说目前来说也没啥用,但是给大家说一说。等于空声明这种写法更优秀,好吧?说多了啊,写代码。class.full name里边一个串。然后呢,再来一个叫做driver,呃,Driver manager a get里边三个变量啊,URL name和密码。啊。什么?C被接上了是不是?好,然后这个里边是不是driver一个变量啊,好了,一共这需要的是不是四个变量,好,我给他声明出来。分别是。死都是死类型的啊,Driver。
06:02
Driver。URL。Name和。对吧。这这两个最简单。然后第一个串啊,这需要引包啊,引包的话直接行吧。OK,然后他俩是不是需要踹开啊?快捷键昨天练了吗?这个快捷键。呃,这个这个玩意儿啊,这个不是两个开是吗。嗯,GDK8版本以后啊,它可以写成这个样子。见过没?他给写成这个样子,能理解啥意思不货吗?是不是就是你能抓这个或者抓这个吗。好,这也是一个新的写法,大家放在这儿好吧。好了,然后呢,咱们接下来是把这两个串搞定就行了,记得啊,这个串呢,也不需要硬背啊,因为有的时候背下来你还背背不太明白,所以在这搞。
07:07
在外边随便一写就有提示了哈,Oracle o.JDBC.driver.oracle driver。你看是吧。哎,给它扎上来。这不行啊。好了,第一个串完美的搞定了。接下来第二个串儿,第二个串呢,不行啊,我也背不下来。咋办呢?就是有的时候冒号啊,或者是怎么怎么空格之类的,整不明白哈,大家我写一个慢点来,大家跟着我操作,看到这个这个就是这个玩意了吗。来点他一下。到这个窗口。我做一步,大家做一波啊关注我。然后在这里边儿呢,选择数据库开发视图。OK,哎,没画直。Development数据库开发模式。
08:00
数据库开发模式好点,它open进入这个界面,这个界面最关键的是这边啊。原来的咱们Java代码和项目结构这块,变成了这个玩意儿叫做数据源。看到了吧。好,然后呢,这块有一个选项叫数据库的什么,就认识了吧。数据库的连接是吧,好了,来,又见另一个。六千六一个。啊,你别着急哈,一步步跟着我走啊,好了,然后在这里边你看它这个创建数据库的连接的啊,他说创建一个这个这个什么DB two,对于linuxnux或者Windows的连接配置文件,其实啊,这里边好多数据库都有的是吧。比如说D买Oracle啊,别的不用看了是吧。是不是连Oracle啊?好了,呃,连接Oracle,它就会匹配Oracle的连接模式啊,然后下边这个name你可以随便的改这个名称,就是说呃,他这块自动帮你改了,叫新新的Oracle,当然你可以自己随便搞啊,你看我搞一个就叫叉叉叉啊。
09:09
当然,一会儿你自己改自己的,没问题的好吧。好了,然后呢,点下一步。点下一步。啊,点下一步的话,应该是中间是一个大白板是吧,不像我这块是吧。不像我那会儿,嗯。长什么样,我得瞅一眼。中间啥也没有点这块啊,这块有这个玩意儿吗。有的是吧,简单来。他看着我点啥了吗?点那个啊。快点开一下啊好了,然后到这边的时候啊,这里面就是说你要连接Oracle啊,你要选择系统的版本。这个版本啊,其实Oracle连接连接Oracle这个版本啊,没有做过,更就是比较大的一个改变,所以各个版本基本上一致,随便选一个可以了。
10:00
啊,咱就选个十行吧。选一个十的话,这个界面跟我一样的吧,是报错了。OK,是错了。然后呢,看这啊。选择JA list。就是炸的列表点过来。好了,然后选择这个啊,或者不选也行,直接全都颗粒的。这个包他找不到这个路径啊,找不到这个路径,所以报错全清它啊。没了吧?好了,然后呢,点啥意思。哎,添加炸包啊,就添加炸包进来,添加炸包这一步呢,我帮不了你了,你炸包在哪呢?自己找吧。好吧。自己找一下啊,我的大包是在这儿。呃。Okc。我在这儿呢,打开。这也是我的路径。先把原本的颗粒的可粒啊啊。然后再点添加。两个块应该到这个界面了,中间大白板已经有东西了吧。
11:01
有东西的话,这块你先到这步,先这块就能读懂了,其实都。该填什么就填什么呗。第一个啊,这个叫数据库的instance啥意思啊,实例应该讲单例模式的时候接触过一个单词啊,这个数据库实例这不告诉你吗?叫服务的名称吗,啥名。啥玩意DB?Or CL吗?看。然后呢,你看这个这个这个灰色的这个框是你改不了的。你不要不要去尝试着改变啊,那接下来呢,它这个串呢,其实就是咱们那个是不是那个URL啊。然后呢,这块host host就是目标地址,嗯,我呢改成我自己的IP啊,你呢,你改成啥,你自己看着办,Logo host也好,自己的IP也好啊。我是1992.168.204.11,然后剩下的这两个玩意不用我说了吧,然后嘞。保存密码。
12:02
测试连接我是没有问题的。P成功连接成功啊。好了来啊,这块呢,我就在数据库的连接下边有了个叉叉叉连接是吧,然后这就是Oracle的实例,然后在这里边选择我忘了啊找找啊。应该是在STEM里边选择你自己的账号,然后呢,数据加载什么玩意儿加载的。编辑。好,应该是编辑。我也总也不失望了啊。稍等他这块发发请求呢,有点卡。好凯,是不是这个表啊。对吧,这个表就上来了。好吧,刷新这个没毛病的啊。这样的话,咱就连接上来了这个玩意儿啊,连接上Oracle啊。没啥用。
13:00
没啥用。你能在这里边写SQ语句吗?不好使,你还得去透子里写。我给大家使用eclipse连接到Oracle啊,只有俩目的,第一目的。为E克斯吹吹牛,他挺厉害,他能连数据库啊,第二点我拿这个连接,我最关键的是每次啊,我这个ecl斯,你看假设啊,我关了。然后呢,每次我在开启一个LIS的时候,我想获得那个连接那几个参数啊,我就可以一键获得了。我点一下就能获得到。对吧,比如说咱们关机了,过了好几天连接字符串我忘了来进入咱们的数据库开发视图,我之前建立的连接是不是叫叉叉叉啊。右键最后一个属性。然后在这里边,最后这个驱动这个这个属性在这呢。我是不是拿这个东西直接copy过来就能用了。哎,右键复制。
14:01
别的无所谓啊,好了,来到咱们的默认视图吧,Java的,然后这个串呢,我就有了,接下来是不是一顿操作了。好了。封装一个。包装一个方法,这个方法干嘛呢?他说查询成绩单是吧。啊,成绩单怎么写。分数square。哎,分数成绩单是吧。好,在这里边写吧,定义SQ语句。好,Circle语句在哪里呢?刚才写过了,直接粘过来copy。也加。好吧。然后呢,拿链接。包错,因为没有。几成?好了。咋还报错,俺们引包这个啊,引爆。好了,接下来呢,是不是超级特种兵了?
15:01
叫做con.prepared statement。Circleql语句扔进去,然后返回的就是的statement PS。执行查询。Query,是吧,返回RS。RS进行便利。好了,便利的话,这块报错了,报错的原因是因为什么呢?踹开啊,哎踹开咱就全踹上呗。全都TRY。好在这里边抽抽,你看我这里面一共攒出几列啊。是不是一共三列呀,所以这块我们拿的时候就直接第一个学号GET1。加上杠T。2s.get第二列也是名,此二加上杠T最后一个是不是这个这个这个这个什么总成绩啊,啥类型。
16:08
印他呀。行了吧,这其实就写完了啊,然后呢,咱们调用这个类。啊。什么方法呢?叫啥来着?好了,运行一下看效果。好了,没问题吧。这就是咱们这个成绩了。OK,这就是咱们的早测题,把昨天的内容呢,简单的搞了一遍。好了,对这个程序呢,我再次进行一个优化啊,简单的一个优化啊,大家来看。你会发现我这个累啊,你想象一下啊,我这个累。中是不是可以写很多方法呀?对吧,这个方法是不是只是其中一个呀。
17:00
假设我在查询别的什么平均分啊,最高分啊,什么什么北京的同学啊,男同学女同学是不是很多很多查询的方法。然后大家会发现每一个查询的方法,或者说增删改查。都会用到特种兵。是吧,而且所有的查询是不是都会用到RS啊?所以呢,我准备。我准备你看连接对象所有的方法都会用到,我把它放在哪了,DB类对吧。OK,那这两个对象我也每个方法都会用到,所以我把它俩也放到一类里。怎么放呢,怎么放啊。这不声明了一个con吗?两个一样的吗?Public prepared statement PS。还有一个public叫result set。As。
18:02
好了,这两个对象是声明出来了,而这边儿呢,你就不再需要声明了,直接。用就行了,OK。2S是不是也同理,直接用就好了?看到没?哎,直接用就好了。好了,那程序写到这儿呢,最后差一步优化什么呀。哎,写成finally,还记得finally不?啥意思啊?哎,无论咋地,他必执行。对吧,啥意思嘞,这个程序我不管你上厕所洗不洗手,最后水龙头给我关上。对吧。哎,这个意思啊,好了,先关什么来着。哎,反着来啊,你看顺序这不这么这么这么关吗,先关二。然后是。
19:01
最后是。OK。然后这三句话报错。这三句话报错,报的什么错呢?Try catch来,with.try catch。这也是个异常啊。那现在我这个方法呢,就写的完整了。完整了。好完整了啊。咱们发没发现,又是这句话。我每个查询,或者说每个添加删除修改,我都会。最好是不都得关闭一下啊。那你这个代码你写这么老多。我下次搞一个方法,是不是还得同样的写这么老多呀?哎,我再次把这些代码封装起来,这个方法呢,就叫close。啊,把这个代码扔进来。OK。
20:00
然后接下来我想关闭资源的话,我在这边怎么做呀,调用父类中的close完事了。这回就简单了吧。哎,这回简单了,以后呢,不管什么方法,这三个对象直接拿来用,而且释放资源就一个单词,不需要这么复杂的结构了。但是程序写到这儿。他有没有啥问题呢,还是有问题的。有问题的。什么问题呢?你看啊,调用这个方法,我不管三七二十一这仨对象,我上来就给你close掉。啥意思呢?假设你路过厕所是吧?看着水龙头正在打开呢。你是不是可以直接给他关上啊。好了,假设这个对象,这个水龙头已经是关闭状态。还可子。出问题了吧?
21:00
也就是说RS目前是空值,然后呢,你直接close它会报什么错啊。是不是直接报空指针异常啊?所以咱应该咋办?什么时候关闭水龙头啊?哎,是得判断一下啊,如果。RS什么时候它不是空的,则。好看。哎,这个大括号大家不习惯啊,补上吧。明白问题吧,哎,当RS不是空的才关闭,如果RS是空的。有必要关闭吗?没必要吧?哎,水龙头关着呢,你还给他拧秃了扣子是吧?不能这么拧啊,剩下的这两个对象呢,都应该尽量的这样判断一下好吧?好,这个判断改一下PS Co。
22:04
完美。
我来说两句