00:00
行,那写完这个comos这个表的操作以后呢,咱们再换一个表,咱们再体会一下,那换一张表呢,确实咱们还有一个不同的体会啊,通过另外一张表,我们再说明一点新的一些小的问题,那再创建一个class,这个我们就要针对于order表的,哎,For cur关于它的一个查询操作啊。诶,这个是咱们要做的说,诶针对于在我们这个当前数据库当中啊,有个表叫order表,针对这个表的一个,诶通用的查询操作,哎做这个事儿那咱们也知道了,你要做查询的话呢,我们需要返回相应的一个对象了,那这块我们就可以,呃再起个扎in,扎in这块我们造个类,这是OM的一个思想,我叫order类,然后呢,这个字段属性都有哪些,我们需要参照你这个表中的字段。这个字段的话呢,跟这个so控命名有关系,它用的是下划线,叫order_ID order_name order_date但是咱们Java中属性名都不爱这样命名,所以我们这块呢,就各自按照各自的方式去命名,我们不要因为数据库里边这样命名我们就妥协是吧?诶Java呢,我们命名呢,不习惯去加这个下划线了,所以这块我就这样写这个order ID呢,类型咱们还是要兼顾一下啊,你这里in的型,我这也in的行,Order咱们这样习惯上去命名private词缀类型。
01:27
哎,我这叫order name data类型order date,就是我这个命名跟咱们这个里边这个命名啊就不一样了,但是我刚才这里边呢,是不是都一样了,哎,现在呢,我们在写这个的时候呢,刻意的就不一样了,那这个时候我们要借着它再说一个小的问题啊,行,这个data的话呢,我们导入这个色下的auto shift s先来生成一下这个构造器空参的。代餐的。该赛的方法全选two three。
02:04
这个OK行,这时候呢,跟咱们这个ESICO这个没关系啊,这个不用写了,这个造完以后关掉,然后来看一下这个通用的查询,该怎么去做这个呢,咱们就直接奔着这个通用的来了。哎,先先写一个普通的吧,先写个普通的啊,要不这个。一下子难度有点大,好,我现在写一个普通的针对于具体的一个搜QL语句的一个查询操作啊,首先获取连接JDBCUUS,第2GET一个connection,诶,这时候我们现在还是roses啊,然后CTRL1得到连接,然后呢连接点,诶prepare statement需要呢,你把这个circle呢提前提供好。哎,这样子select这个咱们叫order_ID order order。下划线date from,这个咱们就直接加上了啊,Hoder,然后where order_ID等于这样一个障碍符。
03:17
嗯,这样就可以了,好,然后呢,我们把这个circle呢放进来,放进来以后CTRL1这就生成了一个prepare statement,这个套路跟咱们之前都一样,下一步干什么,填充战役符了是吧?Set object这个咱们就一个,这是一个不是通用的操作了,咱就直接set进去了,第一个位置它就这一个,我们想查询一下这个,比如说就是一了来查这个第一条数据。嗯,就是填充的它行,那么下边呢,我们通过点去cute,诶query呗。陈一得到一个结果集。那result set,那得到这个结果集以后,我们现在呢,查的是一条数据了啊,那一条数据的话呢,我们就认为它是有一个结果了,那我们就只写一个IFRS点调一下next方法。
04:12
好,现在的话呢,你脑子当中浮现一个场景,CTRLC粘过来这个写个一,然后那边浮现呢,就是我们查询出来的这个结果集。哎,查到这个结构集,现在呢,我们脑子里边浮现这个结构集,下边我们来写这个操作,我r SR next相当于这个指针呢,判断一下,哎,刚开始的时候呢,是相当于在第一行数据的上面啊,诶index的时候呢,先看这有没有数据处,OK处的话呢,我就直接下移了下以后,现在我就定位在第一条数据上,那我们现在需要呢,就获取每一个位置上的这个具体的值了,这个呢是直接通过我们结果集就能来做,但是你要获取几次,这个呢是比较清晰的,我们就获取了三个字段,就三次了,我就先不用那个结构机的语言数据了哈。那就2S点我们直接呢去get一下是吧,嗯,Get一下具体的我们叫object了,这个位置我们写的就是一个一是吧。
05:09
这个一,因为这块呢,你明确的知道你这个ID是一个int型的,我这用的是get object的,所以我这就写个int型啊,这叫ID啊,这是可以的啊,第2GET object这个写个二。那二呢,就是我们这个order name了。诶在这呢,这个我们上面得做一个强转啊,下边是一个string类型的叫内CTRL1,这个也也需要强转三。这是一个date型,这个我们叫一个就叫一个date,诶这个呢,是我们这个SQ下的date,那这块我们也做一个强转。嗯,就是我们数据库里边呢,你返回的它就是个日期,这个日期呢,就是咱们SQ加的data,所以这块强转呢,不会报类型转换异常,嗯,得到这三个以后呢,我们再直接去new一个对象就行了,看order。
06:03
哎,这块我们可以去调这个带参数的这个了哈,ID name data,诶这块我们再CTRL1,哎这就生成这个order,这块我们去打印一下这个order,这就行是吧,然后这块呢,就相当于把这个就处理完了啊最后呢,关闭一下这个资源,诶jdbc u点二,诶close resource,连接PSRS,看这就整个完事了,这呢就相当于我们是演示了一下,就是针对它的操作,目前来看的话呢,好像也没什么特别的是吧,但是我们要想写个通用的时候呢,这里边就蕴含了一点问题。哎,咱们先把这个异常呢,给人家改一下啊,整个呢,把这块包一下点右键。Surround位置。然后finally。
07:02
诶这么着行,这个题目呢,我们查一下。哎,这就出来了,嗯,针对这个order这个表的一个查询操作,那么这个呢,目前来看呢,说也没什么问题,其实这里边呢,我们没有凸显出来这个问题,那下边呢,我们来试图写一个通用的。哎,Public VO,我们这时候呢,是一个针对order的for query。那这个方法的话呢,自然而然我们就让它返回的就是一个order了,这是一个通用的操作。哎,通用的针对于order表的查询操作。嗯,这个order能写成大写小写都可以,咱们在这个呃,数据库当中这个表明啊,这个都不区分大小写了啊,在咱们Java这块呢,这个类是叫大写的这个order了,行,那我们现在要写这个通用的查询操作了,那很显然呢,跟咱们刚才讲这个customer for query呢,这个参数呢,应该都是类似的,那这块呢,也是这个词类型的一个circle,然后呢,Object类型的这样的一个可变型菜,这个都一样。
08:13
好,下边来写。其实也参考一下你下边刚才写的这一个特殊的例子啊,首先JD bc us.get一个connection获取连接。诶,先异常CTRL1好链接拿到了第2PREPARE statement,把这个形态的so后呢放进去CTRL1得到一个prepared sment填充障碍符,根据你这个可变形态的个数来决定这个占位符的这个填充的一个次数,啊for in I等于零,I呢小于。二点单I加加点set object,填充障碍符I加1XI,这个咱们上面都说过了,这就快速的过了啊,填充障碍符填充完以后下边。
09:00
是不是应该叫执行获取结果集了,哎,RS,呃,点叫excute。诶,Queryl,诶,CTRL1得到一个结果集,我就简称叫RS了,然后ifrs.x。那如果有结果,那下面要做的呢,就是我们把这个结果呢,字段一个一个取出来,封装到我们这个order对象当中。哎,那这块你也可以在里边把这个奥对象呢先造出来,跟咱们前面这个思路一样,先呢是调用空参的构造器,哎,把这个对象呢先造出来,然后下边呢,我们去获取每一个字段的值,以及呢,你是针对哪个字段进行赋值的,我们还是通过反射来做。哎,通过反射来实现,那下边一个事,我们是不是要依次做这几个事儿了啊,叫获取,是不是每一个列的列值啊。列值,然后呢,还得是获取每个列的列名是吧?哎,这个事儿,那获取列名获取列值有几个呀?哎,我们前面是不是得需要获取结果机的原数据。
10:09
那这样,所以呢,我们拿着这RS,第2GET一个叫me data,然后CTRL1得到一个叫RSMD,这我就简写了啊,那你有几个列呢?诶我们取决于你这个列的一个个数,所以我们呢,这个通过结构级的原数据啊,首先呢叫获取列数。来RMd.get一个叫column count,嗯,得到的呢就是一个column count,列数好,那这个呢,要操作几次,就取决这个column count的这个个数了,所以写个for循环int I等于零,I呢小于诶column count。哎,佳佳,这跟咱们上面写的那个都类似啊,跟customers那个表一样,那下面呢,就获取每个列的列值,这个列值呢,咱们是通过是结构集还是结构集的原数据做的。
11:01
哎,通过结果集,结果集里边是专门存数据的,哎,它的这些修饰啊等等的是通过哎结果集的原数据,哎这呢就是记住这个套路,哎这个数据本身是在结构集当中的,它的这个列数啊,列名叫什么呀,这叫原数据来修饰你这个result set了,所以这块is第2GET一下,呃,我们具体的这个object这写成记的叫I加一啊,这个就是我们得到的一个object类型的就是叫。具体你这个列的列值就拿到了,然后获取这个列的列名。哎,列名我们这个呢叫RSMd.get一个叫column name在这呢,哎加一好这块呢内这都是四针形的啊。行了,按照咱们前面讲的那个思路,下边呢,我是不是要通过反射了,通过反射。
12:05
将对象的指定属性名,将对象指定名的这个属性啊复制为。哎,指定的这个值,那指定名的就是我们这个column name,这叫指定名的,哎,然后附给指定的值,这叫column value,哎这样子啊,那首先呢,我们需要拿到你这个class是吧,第二然后呢,叫get declared field。啊,在这块啊这块呢,我们是叫column name这样的一个属性名,哎,CTRL1哎这呢就得到了一个filter。然后呢,保证这个field呢,你要是个field呢,也能够访问啊,Set accessable,哎,这是个true,然后哎field第2SET,哎,我们要给咱们叫order的这个对象,当前这个名的这个属性复制为column value。
13:02
对吧,那复制完以后整个的一个循环了,那循环结束以后呢,就是你有声明了,Select里边有几个字段,我们就都给你做好复制了,复制以后呢,这块我们去return一个这个order,诶这就行。这就可以了啊,完事以后最后呢,我们在哎把这个资源,哎JDBCUU第二哎我们去close啊,连接PS2S啊,然后最后你看这块呢,它还是会报错哈,因为万一要你要这里边出现异常的时候呢,这个就相当于没有执行return了啊这个我们在这。诶诶不能说是出现异常,就是万一你要没进去这个if的话啊,现在你就没有return了,诶我这块呢,再return一个no这个情况啊,然后呢,这块异常因为涉及到资源关闭了,不要用。去掉选中啊,这个也不要包到这儿,点右键round的位置,哎,包起来。
14:01
因为这块咱们处理的异常方式都是print stares啊,所以没有必要呢,给大家列这么多种,里边的方式都一样,所以就留一个就行。哎,扔进去。Not。No获取结果集,这个咱们给大家往下记。这样就行,说看似呢,这不跟我们写的这个cos一样吗?没什么区别,看这是是吧,其实这里边呢,有一些问题,咱们测试一下就知道了。好,这边呢,我们去调一下这个方法,这里边你就需要传这个circle口,以及呢,对应的你这个障碍数是什么啊,哎,先把这个circleq写出来。
15:00
Select,这个我们叫all ID,然后呢,All the name all the data from这样。Order where,这个我们叫order ID等于障碍这样。好,这个写个1CTRL1得到一个。奥呢,我们打印一下。没问题吧,嗯,这呢是一个查询,然后这块呢,我们是order ID这块指定是一按说呢是能出来的,但是呢出错了。那错误信息往上看,他说叫no such field的exception没有这个属性叫order ID对吧,出现的位置,哎,我们是在这一行执行29的时候,哎,这里边呢,又调用了我们上面这个叫六十八点一下在这出现的。
16:02
哎,在这里边报的刚才那个异常说叫no such field exception。那么大家。往前推,你现在想一想这个问题是怎么造成的啊,对的啊对,你看咱们现在呢,叫查询的结果集,你看我们在这也查了,你看这个结果集当中的这个列名叫啥呀?叫al_ID叫al下划线内下划线data,咱们这块呢,故意的我们在这个类当中的这个属性名跟我们的表中的字段名是不一样的,不一样的时候呢,我们是拿着这个名是不是去那个类里边找了,咱这用的反射做的嘛,说我拿到了你这个类名呢,叫order下划ID,但是呢,我们这个类里边呢,没有order下线ID这样一个属性,所以就告诉我们说说找不着。对吧,诶这就是我们通过这个题目呢,想要说明一个问题,因为很多时候呢,我们这个表当中,这个字段名跟咱们这个类的属性名啊,确实就不一致,但是他们到时候会有一对应关系,因为咱这有一个叫OM的思想在这说着呢,对吧?诶会有对应关系,但是我没有说你这个字段名跟我这个属性名非得一样。
17:11
啊,很多时候都不一样啊,那不一样的情况下呢,我们怎么去处理这个问题,好下边来说,那我们现在呢,得保证你想你改谁呀,是不是按说得改他呀。因为咱们这个类名你不能改了啊,你看现在这个,现在这个问题就出在这儿了,我们这个表。就叫这个名。你这个累呢,叫那个名谁都不妥协,对,那中间呢,咱俩得得有一个叫什么和平使者一样,把咱俩得顺利的给过渡过去是吧,哎,那中间过渡这个东西呢,就是我们这个结果集。就是结果急。哎,那结构级就充当了这样一个角色,目前的这个结构级没充当这个角色,你看我们这块呢,稍微调一下,比如说我这块叫一个order ID,我先写一个,哎,跑一下你看。
18:05
嗯,这个结果集,这个我们叫结果集的这个呃叫列名或者叫字段名,这个名不一定跟这个表的字段名是一样的,因为我们可以给字段呢起别名,那我们要是把这个别名起的话呢,别名就别乱起了,是不是就用你Java类中那个属性名来起啊,诶这样的话呢,他俩就很顺利的就过渡过来了,From换上行跑一下。啊,这个时候呢,名来了,名来了,名来了,那我们再去获取这个名,是不是就能找到叫这个名的那个属性了?哇,简直感觉有点聪明是吧?来我们写这个circle啊,那我们在这个位置呢,是不是就叫order ID。On a,这个名呢,不是乱写的,哎,咱们刚才说了啊,Order date,哎,这个列的别名一定需要拿类的属性名去起啊,保存一下再来。
19:13
感觉上哇,马上就要顺利了,结果呢,又挂了是吧,往上一走还是这个事儿烦人呢,你看还是叫奥下线ID哈,诶,这不是已经改过来了吗?这里边就要说另外一个事儿,我们这个位置啊,就不要用这个叫get column name了。这个对,这个column name这个方法呢,叫获取列的列名,这个列名指的是表的那个列名,所以你这块呢,相当于没有用这个别名啊,所以这块呢,我们明确说一下啊,通过他做的下边再说啊,通过这个来获取啊,具体来说的话呢,就是获取,哎,获取列的列名,这叫列名啊,就是人家那个表里边的,咱们用这个方法是它咱们现在要做的是不是叫获取列的别名啊。
20:06
列的别名,这一会列的别名呢,有另外一个方法叫做get column啊labor,哎叫列了别名,那咱们现在明显的需要的不是这个方法了。咱们需要获取列的别名,诶,所以呢,我们就用哎这个方法来来替换一下就行。哎,那这个时候呢,他获取到就是我们这个是没有下划线ID的那个啊,就是就是order ID了,其他不用动,呃,这个column这个name你也改一下吧,这个咱们也叫上labor啊来把这个呢CTRLC那在这呢,再稍微的替换一下来保存,那E呢,就是以后呢,咱们起的话呢,就不用它了啊,不推荐使用。哎,就是说那万一要没有别名呢,咱们等一下来看啊好,哎对先过来这块的话呢,我们跑一下。
21:02
哎,这就出来了,哎,所以这块呢,我们说就用这个,哎,Get common labor去替换它,对刚才有同学说说万一我要是没有起这个别名呢,没有起别对没有别名的话呢,我get labor,那就是你的这个列名了,对,就是这个列名了,那杨一呢,就是咱们刚才写的这个customer for query,就这个操作,咱们这块呢,是不是也可以给他改了,对,你看我再替换一下啊,我这先复制一份,把这个呢干掉,这个呢,我们就要get column labor。嗯,这个呢,我们也叫。诶,然后把这个CTRLC咱们诶往这替换一下,好,那咱们上边这块呢,明显就没有用别名嘛,没有用别名的情况下呢,我们看用C里面还靠不靠谱,哎,发现还是靠谱的,所以呢,后边我们确实就不用get column labor了,就用get column labor,然后为什么要用column labor,在这我们说明一下啊。
22:00
说针对于这叫表的字段名与类的属性名不一致的情况。哎,或者叫不相同的情况,哎这个我们说明说,哎必须,哎这个声明circle时,哎这个使用啊,这叫呃类的属性名。来命名啊,这叫字段的是不是别名对吧?哎,必须呢,在声明SQ的时候呢,我们用类的这个属性名来命名我们这个字段别名,那就是这个这个信息啊,然后这是第一个问题,第二个呢,呃,在获取。嗯,这个或者叫在使用咱们result set。哎,这叫啊Meta data时需要哎使用叫get column,哎,Labor,哎使用这个方法来来替换哎get column name这样一个方法。
23:09
哎,实现来替换这个方法啊,这个获取哎叫列的别名。哎,获取类的别名啊,这个别名呢,就是我们说那个类的属性名,再通过反射呢,我们就能够找到这个属性了,就啊啊那么这块我们再来一个简单的一个补充说明,呃说明呢,就是说呃说如果呃circleq中啊没有给这个字段这个起别名,哎,我们这个get con labor呢,仍然可以获取的就是列名啊。哎,获取的哎就是哎列名就是杨位置呢,你要是呃起了别名了,我们这时候呢,就获取的叫别名了啊你要是没有起别名的话呢,我们这边获取到就是还是你这个类名,就针对咱们刚才那个customer那个情况,诶用这个开Co labor呢,也是实用的好,这样的话呢,我们就把这个问题呢就说清楚了,这个说完以后,哎我们感觉上应该松一口气了,紧接着的一个问题就是说能不能写一个针对于customer表。
24:15
哎,Order这个表,乃至说其他的各个表当中一个通用的针对于各个表的一个查询操作了,哎,想一想是吧。
我来说两句