00:00
然后我们来看一下,我们就因为你们新创建的时候,应该也同学也看见了这块,你们肯定没有东西了,都是空的,因为你们没有没有任何的一个工厂,那我们就创建一个工厂,创建一个工厂。加载模板对吧,我们就你你你刚进来的时候,应该他是应该是这个位置吧,Java这对吧,点的Java那你选没问选没啊这块如果你看一下project的SDK对吧,它默认的这个我们放下来了,如果说这块你还是红的,就是no SDK你干什么,你选一下,或者说你直接在这块,如果你说你没有通过刚才那个配置信息把那个SDK加进来的话,你在这个地方去加载这个SDK进来也可以。啊,就是指定工程的时候,但是还是把那个默认的就是工程那个默认的给配一下,因为每次都加载一次比较麻烦嘛,啊它这个自动西给我们再加载了,然后这个东西呢,可以不勾啊,这个不用勾,这是什么,从一个什么模板来创建工程吧,啊不需要模板啊,不需要模板就是跟一个例子一样,你们也没有选任何的一个模板,没有选模板,然后直接下一步一个组名,一个阿里开,就工程名,那在我们这边一般都是康爱的硅谷对吧,然后下一个就是工程的名字,我们这个地方应该叫MY。
01:15
S。应该已经有了,我叫这个咱们0529是吧,0529吧,工这是工程名,工程名啊直接下一步,嗯,这块稍微看一下,不要动它的一个目录。就动了之后你再手手枪,就是说试一下,假如说我加两个零,然后这边你你看我加东西的时候,这不变嘛啊,就是说你不要动它,你在这块如果改那个工程名的话,哎,它还是会啊,跟着变的就正常的,你没有动这块内容,你在这块添加什么东西,这下面就会跟着变,能懂这意思吧,就说你这个目录呢,你就不要动,就工程是所放的一个目录啊,你自己也弄一个类似于一个LIS,一个工作空间一样的东西,我就叫ID我。
02:01
啊,当然这个工作I ideal当中的一个工作空间是咱们自己给他定义的,其实它没有工作空间,它是面向工程的,他一打开了只能打开一个工程啊,不是像一个LIS那样,就是打开一个工作空间,对吧,然后工作空间所有的工程都列在那啊,他也可以做到,但是它对于idea来说没有意义啊,没有意义它是面向工程的,OK,嗯,就下一步。他说没有让你创建一个对吧,你创建一个。创建一个之后,这地方会出现这个import changes和enable out,就是说自动导入吧,依赖你就让它自动导入就行了,也就是说你这地方框文件如果说有更新有改动的话,它自己做更新啊,你选那个自动就选后面那个OK。呃,我们把我们的依赖拿一下,我们这个地方只要这两个依赖,因为我们是要读MYSO数据,对吧,那MYSO的一个驱动包里肯定有啊,驱动包肯定有,那还有一个就是我们要继承什么abstract source,抽象的一个source类,那肯定是from的吧?啊,我们用的版本是1.7,所以啊,这个东西依赖导一下导下OK。
03:09
放在这,我这里边就是加载一下就行了,因为我这边已经用过很多次了,你们可能要下一会儿下一会儿。好,这块就搞定了,依赖就搞定了,搞定之后呢,我们看一下这块,嗯,你们有的人是这样的,有可能你们会出现这样情况,就没有project structure,还有这个什么database main project等等这些东西在这。这有个类似于什么小电视这样的东西,对吧,你看现在我勾掉了,现在就没了吧,因为有可能第一次打开的界面是这样子的,就不方便你把这个东西勾出来啊,勾出来这个东西到时候这structure就是看那个,呃,整个的一个工作结构的啊,工作结构的就是什么意思呢?看一下我随便搜一个那个。啊,定的一个类浪爆下的对吧,然后这个工作结构是什么意思,你看它里边定义的什么内部类啊,然后它这一个什么方法呀等等啊,在这块就很容易能看出来啊,直接就可以看出来,就是整个的一个结构啊,结构是这样的就比较方便啊。
04:09
好,呃,然后我们看一下还有还有什么东西讲的,嗯,这地方目前应该是没有什么其他东西了,主要还有一些快捷键,到时候用的时候再说啊,用的时候再说,OK这块呢,我们还是同样的建一个。好。其实见不见包也无所谓了,对吧,看看店买的硅谷。下这个包,然后这包上面呢,有几个类。然后我们先。把这个配置信息搞定一下,因为JDPC要跟JDVC连接了,所以说我们希望把这个写成配置文件了,不要写在代码里面写死啊,就这四个啊,Java URL,那个用户跟那个pass沃的啊,你只要涉及到JDPC连接,这四个东西跑不掉了啊,你配置文件里边也好,你自己写也好啊,都是需要的,他都需要,OK,我把那个一下。
05:03
嗯,Resource底下对吧,资源包,这是它的一个资源包,有一个文件,然后把我们的这个东西拿过来。粘贴到这里吧,那这一块你要根据你自己的一个情况做一个改变吧。对吧,哎,就是说我这个地方是到时候用的那个MY搜是102,就哈102上那个MY,那你就改成自己的,然后这个什么用户名密码改成自己的就OK了,自己都OK了,好这是这个还有一个JDBC,这是JDPC的,还有一个劳务附件啊把劳附件也粘一下,打印些日志。RC,那这个日志到时候就打印到我们那个。就是这个是一个任务嘛,From NG,你肯定要拿到机群上去打印的,对吧,它会打印到控制台的,打印到控制台的一些日志,因为里边写了一些打印的日志,到时候大家可以看一下。这个捞佛店,你要是其他地方有的话,你直接粘过来也无所谓啊。这这这都无所谓。
06:00
嗯,这个东西没有识识别成对吧。有空格是吗?Shift加shift加F6直接重命名啊,这个地方对吧?啊,多一个空格重命名OK,嗯,这块所以说导进来要看一下,刚才完全就是它没有识别成pop嘛啊,没有识别成这个文件系统,所以说诶它的一个就是简单的一个文件啊,通过这个图标也能看出来啊,图标也能看出来,稍微留点心,留点心,这块多了一个空格,那大家在这个文档粘的时候也注意一下,你可以粘这个吧,这个里边没有空格对吧。这个也有空。你签的时候注意一下啊,这有个空格,OK,好,接下来我们就把这个类拿一下CTRLC。啊,这个类就纯跟马进行交互的。买个help,就是我们之前的图里面看一下。图里面画的这个地方,我们当时不是说了这一块是核心的什么,我们在那个自定义的source,就是继承的抽象的那个S类里边要写的一个东西吧,啊,就是循环的去拿数据封装even的,然后推给那个China是做这个事的吧,OK,然后这个事呢,我们此时拿数据啊,是从MY斯克拿,对吧。
07:18
从马色克读取数据啊,所以说中间你是不是要建立什么GDBC的一个连接。然后生生成搜语句,什么statement,然后去设置参数,然后去获取数据,什么result set,对吧,反馈值,然后我们还讲了result set呢,不便于后期的一个处理,所以我们又把result set那种格式又转化成了,对啊,就这些方法呢,我们通通的是写在这个类里边。啊,专门用一个类来帮我们做这个事儿,因为你直接在这写可以,但是你那个方法就特别冗长,对吧,就是说我们要不断的有的东西呢,就给抽出来啊,抽出来就是说你在公司当中开发也好,或者你自己后面做做一些东西也好,就是一个一个方法,不要超过两两百行的一个代码,200行代码的方法就太难读了,就不知道里面干什么事了,就是你这个方法可能你真的写在一块有很多,你把一些核心的模块啊,就重要的步骤给它写清楚,然后相应的这些步骤实际的操作呢,你提取这其他的一个方法,一个方法干什么事,你在方法注释前面给大家写的清清楚楚的就OK了,不要说整个的,像整个的什么跟JDBC连接啊,都全部写在这个方法里边,当然能完成功能啊,这不是说这样就完不成功能,对吧,能完成功能,但太冗常了,你自己回头再去读这个代码的话,你就读不懂了啊,就不知道你从上面到下面就不知道在干嘛了啊,你就说这个方法里面,我们只要写核心步骤就读出去,风装写出去就。
08:43
做这些事,然后返回一个什么back off或者ready啊,就返回值给它搞定,然后核心的其他的一些读数据,或者还有我们提到的那个off,对吧,我是要存在另外一张表里边的这种方式,统统都放在另外一个类里边来做啊,另外一个类里边做OK,那我们需要讨论一下这里边到底做了什么事啊,就是核心的是这些啊。
09:05
获取JDBC的连接,获取JDBC连接还会写吗?不会写了对吧。都忘了对吧?Class点什么for name,然后把那个driver放进去,然后driver.driver manager.get然后把那个什么URL的那个用户放进去。稍微提了有点印象吗?有点印象就行了,咱们核心的不是关注这一块,然后通过JDVC连接拿到之后是不是去获取数据啊,查询数据,在查询数据之前,你一定要有一个什么东西啊,搜个语句吧,对吧?哎,搜个语句我们可以干什么呢?搜个语句从外面传进去,就通过那个context,之前不是说过通过context可以读什么配置文件里面的东西吗?可以从外面传进去,但是我们也给他提供一个,就是说如果他没弄的话,我们要自己把这个搜给拼接起来,就默认的,就这个意思,就说你可以从外面传,如果外面没传的话,我们有一个默认的语句,默认的语句呢,就是查select新这种方式能懂吗?但是你要是传语句来,你可能读这个表,假如说有十个字段,十个字段,你可能只要其中的几个字段吧,你可以传语句进来,传语句进来,如果说你没传,我默认的就是什么呢?Select的新就是说全量,你有多少个字段,我全部给你查进去啊,这是默认的啊,这种方式OK,然后还有什么查出来的数据转化为字符串,对吧。
10:28
转化为速OK这个地方。写了一个核,这也是核心的步骤之一啊,就是说插入数据保存off,那大家看这个是我们之前提到的另外一张麦表吧。这张表就是我们保存那个上一次我不是举个例子,上一次第一次读到十。它不是循环的被process去调用嘛,那第二次应该从十一开始读,对吧,11条数据开始读它这个十,他怎么知道下一次要读11呢?那肯定是你把这个十保存下来了吧,保存下来了,那我们是保存在那个嗯,同样的那一张表里边啊,那张表里边,所以说这个地方你读完数据转换成四传之后,还要把这个插入去,那插入的就是那个偏移量啊,我们叫off,就是说你上一次读到十,你第二次假如说又读了五条,读到15了,下应该从16开始读,对吧,就是这个意思啊,就是这个意思,最后呢,还有一个关闭资源的一个方法,就是说那个接DBC啊,假如说你这个任务异常退出了,抛异常退出了,对吧,或者说什么你自己关掉了什么东西啊,你要把它的一个资源给关闭了啊,资源关闭了连接啊,这些东西啊,Prepare system什么的都得都给它关下。
11:34
啊,都给它关一下,那这里边核心的是这五步啊,这是核心的,但里边小细节还比较多,我们来看一下小细节的内容全部在这。我做了两张表啊,大家说的OK,嗯,看一下这个是这张表是关于这个类里边属性的一个说明。这里面我定义了哪些属性,大家看一下,嗯,Run query delay查询的一个时间间隔,这有一这个带括号的,我说明了带括号的就是有默认值的。
12:02
能懂这意思吧,就不带括号的,没有默认值的,那对比着看应该就是,哎。就这样的方式吧,带括号的是不是就这些参数啊。有默认值的吗?不带括号的,就是这样的一个参数,没有默认值的啊,我也定义了两类的,一个参数带默认值哈,不带默认值的OK,嗯,这个查询时间指的什么意思呢?那你读MY搜L表,你是要监控MYSL表的数据吧?你不能这次读完了之后立马读吧,对吧,就中间让他休息会儿啊,其实这个间隔时间呢,就传进去thad.sleep把线程睡一下,就这个意思啊,到时候你看一下就知道了,说这什么间隔时间对吧,其实就让让线程睡一下,然后再去出发那个process,就读做这个事的,OK,然后还有一个。缓存大小啊,这个东西就我没有什么太多说说了,OK,还有这个属性要注意一下start from。我们之前提过,我们要监控的那个主表是不是带有自增的主键啊?
13:01
那start from,看这个名字。从哪开始读吧,啊从哪开始读这个地方,如它也有默认值对吧。带括号的嘛,我设置了有默认值的,就是说如果你没传这个值要干什么,从头开始啊,从头开始传了,那就从你传的那个值开始啊,就是这个意思,就是说你第一次执行的时候,因为你服监控一启动,它是不是会第一次去扫描你们这个表啊,啊第一次扫描的时候,它是从哪开始的,是这个作用理解错,那其实这个这个参数就是配到那个什么了。搜索语句里边的吧,要拼接到搜索语句里边对吧,因为从哪读你搜索语句决定的呀,VID大于零大于十大于15对吧?啊,你读出来的那些数据,你就知道要干什么用的好,然后第二个。Current index。查询语句当前ID每次查询之前需要查原数据表,那这个解释说明呢?给大家再解释一下,这个抗日内一代什么意思呢?就是刚才我们所提到的十十五这个东西,那你第一次读从零开始读,那总有一个数据结束吧,对吧?读到哪结束的,这个叫current index。
14:12
啊,Current index这个属性就是说,呃,我们应该要存的东西呢,就是current index存在另外一张表里边,把保存的下一次在拼接语句的时候,要从另外一张表里边给它读出来。给它读出来,然后重新拼接这个思考啊,拼接思考是这样的,然后record set啊查询返回的一个条数,那其实这个东西我们可以用它的一个代替它index啊,就是说什么呢,上一次。读到哪了?加上这一次读的数据。是不是就你接下来要存到奥,能不能理解对吧,就上一次我读到十,我这次读了五条,那我应该往另外一张表里边存15啊,就这两相加的内容,就这个意思啊,这要注意一下,然后还有table。监控的表明。就说你要兼顾哪张表,你要告诉他吧。
15:01
就是你配置文件里边监控哪个文件,监控哪个文件夹,监控什么端口,是不是配置文件里面写的呀,对吧,我这个地方MY呢,我监控哪张表,我也是在配置文件里面写的,而不是有一个默认的什么表,因为表没法默认嘛,他怎么知道你用什么表啊,对吧。所以说这个表明给它传进去,然后还有一个columns to inec啊,Select查询字段。查询字段默认的是新,刚才提了吧,就它默认的有个值,就是你什么都不传啊,它就是新,那你要传几个字段你里也可以啊,它就把那个字段拼接到那个搜语句里边了,你用默认的就行了,你到时候看一下,然后还有一个customer query,这是用户传进去的查询语句。默认的是不是它根据这个字段拼接select的新from这张表,然后will ID第一次大于零吧,如果你什么都不传的话,第一次就是这样的,假如说你这个表啊,叫student的,举个例子啊,这个地方呢,默认的就是默认的,你没传就是零,然后呢,查询的语句也没传就是默认的,好,那它出现的第一条语句是什么样子的,就是c select c from,你传进来这张表student,然后will啊,会把will就拼接进D,有个自动主件吧,DD大于零啊,第一次平接是零,假如说通过这个方式读到十,第二次执行的语句就是ID大于十。
16:22
啊,就做了这个事来控制他每一次读的一个范围的,读的范围的,那你想想看,既然要做这个事,你每次是不是要拼接词汇语句,就是不说拼接吧,你每次是不是要改这个词索语句,对吧,每次执行的都不一样嘛,那改思索语句之前。你要干什么事儿?是不是要读另外一张表的数据啊?对吧,读另外一张表的数据,那有同学可能说我第一次读那张表不可能有数据啊,因为是你写进去的,所以说第一次就用什么。你传进来的值或者没传的话,就用零来代替,就是看它这个返回值,这个好做吗?就是说读一下那张表,有返回值直接用返回值,没有返回值怎么办啊。
17:06
用它默认的值啊,用它默认的值是这样的。好,呃,Query查询语句是我们定义的一个变量,就是中间我拼接的,拼接成功的那个query,宽RY,然后字符集uf啊有点报告吗?OK,嗯,好,这是相应的一个属性啊,属性可能听着呢,不要晕,因为他不知道这些属性,就只知道他干什么,但是好像一说呢,又什么有默认值,又没有默认值,到底什么方法调用呢?对吧?来看一下下面是我们写的几个方法。写的一些方法。首先我们有一个。构造方法,这个构造方法里边我们会写上获取JDBC的一个连接,然后初始化这个context。OK,看一下啊,就当前我们这个类是我们写的干什么跟MYSO进行交互的吧,你看你看刚才所提到那些什么属性啊,方法也好,是不是全是跟我们买进交互的一些方法呀,对吧?OK,然后这个类呢,其实就是写我们那些核心方法呢。
18:08
写妈妈的,然后你要在哪调用它呀?是不是process方法里面去调用啊,因为你要获取数据嘛,哎,你要不断的调用它,然后把数据封装过来,然后转成string,然后封装成even写出去啊,整个的逻辑我们source那一块是读数据封装的,写出去,然后。Source help这个类主要就是负责读数据的啊,它是读数据真正的一个操作的一个方法,然后通过其他的一个source来调用啊,然后把它封装成even写出去,写出去OK,是这样的,所以说呢,我们把它的一个初始化context。之前不是提过,它应该是在哪初始化这个。有一个这个方法吗。对吧,这个地方来不断的去获取那些你配置文件里面写的那些值,对吧?哎,那我们通过这个构造方法呢,就很简单了。
19:03
干什么,在这用一个。另一个呢,Help类不就完了嘛,对吧,因为我们把它的一个初始化方,初始化的一个过程全部写在它的一个构造方法里边了,那你生成一个它的对象,那也就等于这个contact全部完成了。啊,全部完成了这样的,所以说呢,我们这个构造方法呢,是有有参数的。传那个contact进来的啊,传那contact进进来了,OK,然后in need contact就获取JDBC的一个连接。获取JDBC一个连接,这不用说,然后check这个是。检查设置的,就是说你看啊,你们之前写的这些方法,就是用的这些东西,你有没有尝试过这种黑体的,如果说找一个假如说举个例子吧,假如说这个是这个是黑体的,对吧。黑体呢,但是呢,这块是。杠。但如果说你不加这个属性,你启动那个A电脑会报异常吗。
20:02
会吧,哎,他一定会的,因为这个属性他没有,而且是黑体呢,是必须要指定的,他一定会报一条,那我写这个方法是干什么用的,公司生产环境当中一定要有的,这个就是做那个校验的,能懂我意思吧,当然你这块你要不写这个方法无所谓,因为你自己知道你传了参数进去了吧,啊就做一个校验,你校验什么呢?就必须要传的就就是那个table,你既你既然写的是my circle source对吧,假如说配置文件里面table没写,你是不是这个任务应该起起不起来啊,你就报异常对吧,是做这个事的啊,做这个事的这个校验啊,开发当中你可以增加一些内容,因为开发当中啊,代码写的复杂,一般一般就是异常抓抛的比较多,第二个就是它这个安全性啊,可靠性,还有一个是那个QBS,就是说访问量并发这种问题导致复杂,很导致代码很复杂,其实它这个核心逻辑,如果说你把这些异常全部你把工程的就是。就是什么呢?嗯,实际企业当中的项目,如果说把异常全部往外抛,不抓,或者说你不考虑并发全部单线成工作的话,你就发现他的逻辑也比较简单,它重要的就考虑这些东西安全因素啊比较高,因为它在线上生产的环境当中,不可能像你在这做测试一样,人要改一下,今天还把虚拟机关了,对吧,人家服务器一直都是开的代码一直在跑的,所以它对于安全性啊,这这种东西校验的比较比较高。
21:20
啊,逻辑呢,就那些也比较简单,逻辑没有什么复杂的,太复杂的地方。好,这是校验一个属性,你可添加可不添加吧,好,然后是build query。构建词汇语句对吧?啊,这个要有的,这每次查询的时候是不是都要调一次这个方法呀,因为你的ID是不是在变了,对吧,ID都在变,一直在变,OK,然后是执行。执行我们也抽出来了,其实你这些东西你是不是可以都放在一块抽出来了啊,执行专面有个执行的方法,就是互相调嘛,然后这个是get all Rose,就是将那个结果转化为词spring啊,方便后续操作的,这些提过啊,这些提过专门有这个方法,好,然后接下来这几个方法。
22:07
这四个方法。是它同样的也会用到这个JDVC的连接,但是呢,它主要是跟我们另外一张表进行交互的。我们虽然监控了一张主表,对吧,但是我们是不是还维护着另外一张表啊,直接提了它里面存的是什么,就那offet嘛,对吧,Offet offet,但是它有一个主见,其实就是这个表明。因为你这个任务可以同时监控多张表啊,对吧,所以说这地方就是表明加奥赛,你这张表读到哪了,另外一张表A表读到十了啊,B表读到15了,一下一次启动的时候是针对A表启动的任务,还针对B表启动的任务,哎,我都保存了它相应的一个offet,相应的offet OK,那看一下这四个方法,首先是update ofet to DB,那你想想看它这个是写还是读啊。都更新了对吧,更新在那个什么。DB当中数据库当中来更新它这个就是将每次这个结果来写入进去,写入进去啊,然后这个地方是执行的真的一个操作啊,SQ的搜口啊执行的好,然后还有一个这两个方法。
23:11
这两个方法也是互相调的,呃,Get stay d index。那这个是写这个是干什么。读吧,对吧,而且传一个什么进去了。这之前我们提过,是一个起始的位置吧。那之前提过,他第一次就是你说你第一次用form a的来监控,假如说A表的话,它是不是这个。我们刚才提到那个,我们另外维护的这张表是不是肯定没有数据啊,那一次都没写过吗?那这一次那你去获取数据是不是肯定获取不到啊,返回值没有了,返回这没有怎么办。用默认的这种方式来代替吗?哎,用start from来代替啊,是这个意思,就是说所以说我们在这个get DB index这个地方呢,添加了一个。Start from。
24:00
啊,就是为了第一次来获取的时候,他肯定是没有值的,因为你自己都没写,这张表是让自己写进去的。啊,自己写进去的啊,所以说这个地方要注意一下,然后是快快啊,这个就是刚才这个方法里面就掉了。它真正的执行的搜口也给他提出来了,就不在这里边执行了,就这个意思,所以说这里边更多的是一些方法的抽取啊,看着比较复杂,看着比较复杂,OK,我们把整个的逻辑。把这些方法搁一块跟大家理一下,跟大家理一下OK,那什么样子呢,首先任务。我们监控一张表,假如叫A表,它里边有一个什么字段ID对吧?啊,这是自动的12345乘进来的。然后我们还要自己维护一张B表,这个B表呢,只有两个字段,第一个是table name对吧,Name好,第二个是outside,就说我们读到这张表读到哪了啊,这两张表,这个两张表应该没有问题吧。OK,然后我们整个的程序啊,刚才那些方法它是怎么运行的呢?首先你在那个source类里边是不是要初始化index。
25:08
第一步肯定是初始化index,它会掉那个什么。Configuration那个方法去初始化它的一个,呃,Context说错了,不是index context就上下文,就读你的配置文件。读配置文件,那读进来之后,我们刚才说的那个初始化我们放在哪。还记得吗?初始化的过程,我们核心的过程放在哪,不是直接放在那个方法里边吧。是放在我们有个help类的构造方法里边,对吧?那个构造方法呢,我们传一个参数进去叫context OK,那这个方法里边呢,就是我们核心的要去啊读配置文件啊,这是第一个啊,它最先调的,因为它会把这个配置文件读进来之后啊,它会循环的去调用那个process方法啊,Process方法OK,那就是读读配置文件啊,读配置文件,然后还有一个初始化GDPC。初始化它这个JDBC啊,就是说连接我们创建好啊,这些东西都是准备工作,准备工作OK,这个完成之后呢,我们干什么,JDBC有了,然后去读数据吧,但是读数据之前你要做什么事。
26:15
拼接缩口对不对?对吧,拼接烧烤,那拼接烧烤之前你要拿什么拼接啊。首先配置文件里面是不是有select什么字段,或者说默认的新,然后哪张表这个东西有吗?但是VID大于几有吗?没有吧,所以说你在拼接搜之前一定先获取一下谁啊,先调用的是get。Index那个方法吧,就是说先去获取一下ET,当然它分为两种情况,第一次获取跟从第二次开始到往后第一次获取是。没有获取到吧,没有获取到,我们是不是有一个什么start from对吧,它就用这个默认值来拼接,默认值来拼接,OK,然后后面都是用它里边的值了啊是这样的,那这个东西有了,然后就build query对不对,对吧,我们的我们的方法不是有一个build query吗?构建那个什么query语句,然后呢,XQ的query吧。
27:13
执行这个搜码,执行搜之后,然后把这个搜狗返回成。对吧,返回值它不是一个什么result set吗?对吧,要转成string后面要用吗?OK,好,执行完了之后转成string之后。干什么?此时你可以把那个off写回去,或者说你先处理完封装,问可不可以啊?你是不是要把这个数据要封装成even的,然后写到China呀。你你核心的逻辑不在这块吗?对吧,那写到China之后,你是不是应该把那个更新一下呀,会调用那个update那个方法吧。哎,调用update的方法,它核心的一个逻辑就是在这一块啊,整个的。整个的是这样的,就是说先获取一下off,那off有两种情况,有值和没值,第一次肯定没值,没值的话,我们用的start from这个这这个方法里边传进来的。
28:11
弹下来值OK,拿到这个off以后来拼接我们那个搜索语句。注意,然后后面就是循环调用这几个方法了,能理解你每一次是不是都要先去获取奥赛的。然后你每次是不是都要build query?因为你的query在变嘛,对吧,你至少里面有一个ID那个字段在变嘛,啊每一次都会在变,所以说会build query,然后执行,然后转成SP,然后封装even,然后写出去,写出去之后更新,这你想想看,我刚才写的这套逻辑是不是要在那个process里面写。因为它要被循环调用的嘛,啊,被循环调用的是这样的整个的过程啊,核心的逻辑在这块,OK,呃,其实对大家比较难理解的应该就是这个方法,因为这个方法里边抽的东西太多了。但是你要知道的,其实里边涉及到你核心的往外跳出来看一看,核心的跟两张表进行操作,主表呢,就是我们要读数据的表,还有一个附表,就是保存什么off用的。
29:09
那每一次,因为我们要保证你第一次读完数据之后,你第二次读的时候,你不能读重复数据吧,所以说我们有一个表来保存这个off set的啊,做这个事的好,Off这个地方有一个问题点,就是大家应该发现到了这个问题吧,就是说我第一次进来没问题。插入就完了吧。只是音色命令了,那第二次你是要更新啊。你搞一个ID,专门来记一下他执行了多少次吗?不太合适吧,就那个process方法,之前刚才不是提过一个什么。有则更新无则插入的一个方法对吧?啊,那我们看一下啊。有人用过的吧,等一下我们,嗯,102里边有个买。From mea表啊,我把这张表叫这个mea表啊,叫这个mea表,就是说原数据表嘛,就保存这个off用的current index table OK,这张表有一个什么特点呢?你要执行那个有则更新无则插入啊,这张表必须有主件,而且主键是外面指定的。
30:17
能懂这意思,外主键是外面指定的是什么意思?就是说你在插入这条数据之前,你就知道它主键是什是什么了,能懂意思吗?自增的主键,你在插入一条数据的时候,你能知道它主件是什么吗?不知道吧,因为自从到哪你根本不知道吧,所以说主见是你外面去定义的,就是说什么呢。你们之前学的那个什么DPD那张表。他的一个de pd什么内码等等等这种东西,Depd那张表它是不是也是按照什么ID来的呀,你在插入一个新部门的时候,是不是ID可以不传进去,你知道下一个部门ID是多少吗?不知道吧,你插入进去之后,你再查一下才能知道吧,哎,所以说这种非自增的主键是完不成这个的,就是说自增的主键是完不成的,就是它就这个语法,就要求你在外面必须把它主键传进去。
31:08
传进去,那我们看一下,嗯,这样我们再建一个表吧。新建啊,新建数据库了,对吧,新建一个表,看一下这两个两个语法的一个区别。这对吧,新建一个表,嗯,随便来两个名字什么ID,然后类型特吧,嗯,我们把它自增这个改成自增的对吧,改成自增的OK,再加一个值,添加两倍。嗯,那我差保存一下,就这两个东西表明,嗯,就像一个什么员工表烟P对吧样的。啊,这个地方自增的,应该是把它标记为主键,因为它自增了对吧,保存一下PPOK,好来看一下这张表,设计表打开。
32:05
这张表呢,我设计的这个so table是一个主键,但是它不是自增的,不是自增的就是外面指定的,那我们看一下这两张表的区别,首先我们定一个查询,我先说一下那个什么呢?呃,有则更新,无则插入的一个语法。它是两个东西写在一块的,它这样的色的into,这是正常的一个插入语法都会写了啊,我写一个这个from贝塔表,From贝塔表,然后你要插入数据是不是。Values括号里边,我这里边定义的一个是表明一个off,我看一下那个的那个in的对吧?OK,那我差类型,假如来一个name,再来一个嗯,它是一个in的类型,来个二可以吧,来个二,OK,呃,这是正常的一个插入语法,这个语法能执行的对吧?OK,呃,接下来我们要把两个语法放在一块,它是怎么做的呢?WK的。
33:05
嗯,K哦,然后后面写那个阿的语法阿的。Update等什么呢?更新两个内容对吧?更新谁呢?嗯,首先如果说这个值没有,你才执行这个,有的话更新吧,没有的话执行插入操作对吧?啊执行插入操作OK,呃,这两个东西我来拿一下这个字段,CTRLC等于name,然后是还有一个是c index对吧?CTRLC看过来等于二,它的语法是这样的。插入语法跟更新语法在一块,当前我们这张表里边有这个内二的这个数据吗?没有吧,来走一下。嗯,哪块有问题吗?我看一下啊。的data into table这个没有问题,这个能执行吗?看一下这个插入语法没有写错吧,这个没有问题啊,然后on的kon update s这个是一个差类型哦,那应该没有问题啊,它这个地方报什么错啊,他说语法错误检查你的。
34:36
这个在这个位置。WKT的看一下啊,这个语法就是那几个位置记不太清。在这块WKT的更新这块对吧,插入有则更新无则插入。
35:00
Into w k的on啊,On在前面到X就这几个位置,这几个位置总是容易写错,OK,呃,当前这个二已经有了,对吧,我们改成三,改成三。改成三之后来执行一下,运行成功了,来看一下这张表,刷新一下。内三有了吧,来看一下,我们再来一个改一下,改一个什么什么名字张三,然后CTRLC过来,那张三这个是不是没有啊,对吧,刚才我们是看到了更新的操作吧,对吧,刚才是更新,那这个张三没有,我们看一下他插入的一个操作,OK,执行一下,这边过来刷新一下,是不是张三三也能进来啊,对吧,这个一个语法就直接搞定了,如果说张三有的话,那你下一次是不是这个。Ad,就是说那个can index一直在变了,对吧,假如说哎这次读到五了,你把这个改成五,哎再运行一下,那它就变成了。
36:01
张三补了吧,哎,张三五了,就是用一个语法,而不是说你要执行三次,首先去读一下没有没有执行插入,然后再读出来吧,啊这就很方便啊,这直接用这个语法找定了,而且这个语法就是写的这个update这的,刚才给大家看了,就更新的这个操作这块的啊,就更新这块的一个内容的,因为更新这块你有两种情况嘛,对吧,有或者没有,那第一次进来的时候,你要执行的是插入操作,那往后每一次,无论是你当前这个不断的循环当中,你是不是也要去更新啊,还有一种情况就是你这个任务挂掉了,挂掉之后要重新启动,那你不可能说你这个任务挂掉之后,你重新起的时候又从头开始读吧,你挂掉从哪挂掉了就从哪读吧,那你这个你保存在这个表里边,你当前那个A任的任务挂掉了,关你这张表什么事吗?没有关系吧,这张表里的数据不会丢吧。啊,所以说我们存在表里边,就是说当时我们提过应该要保存在非意识环境里边啊,非意识环境里边,这个是要大家跟大家说的一个点,就是说啊,这个语法啊,就是说嗯,有则更新,无则插入的一个语法啊这块大家需要注意一下,放在前面是吧?放在前面,然后这一块是我们关于。
37:18
Micro so,它的一个工具类,哈类的一个分析啊,哈勃类的一个分析,但是这个东西也没办法代表大家敲,这个东西还是比较比较复杂的一个东西,而且也不是什么复杂吧,主要就是它纯粹是跟GDBC的一个交互,只不过方法比较多,显得逻辑好像比较复杂一点是吧,其实你还是一句话,你核心抓住两个点,两张表,几个操作。啊,针对于主表只是读操作,针对于附表,原数据表有读有写,但你要搞清楚什么时候去用,对吧,你把逻辑理清楚了,然后再去看这些方法啊,都是你们之前学过的,跟GDBC的一些交互啊,全部都是你们学过的,没有什么新东西啊,没有什么新东西是这样的,这是关于这个方法说明,然后这个类呢,到时大家就拿过来用就行了啊,这个要带着写一天就没了,把这个东西摘一下。
38:19
你们看一下这里边就是我们刚才提到的那些方法啊,那个那个表里边方法名我就是从这粘过去的啊,从这粘过去的什么so,这个啊构造方法,然后是初始化连接的啊,这个方法都是跟这张表一一对应的啊,跟这张表,因为我是从代码里边给它粘过来做成这张表呢,你可以对应着看,这也有相应的一个中文解释啊,对应的去看一下这里边核心做的事情你要搞清楚啊,逻辑去捋一捋,可以自己画一个图,哎,整个的流程是怎么走的,哪一块是被循环调用的,哪一块只调用一次啊给他家捋清楚,嗯,这这个类看起来就没有那么复杂了啊,没有那么复杂了,可能现在大家看的第一个逻辑比较复杂,第二个GDBC的一块东西都忘的差不多了啊,现在让你们自己写一个GDBC连接应该。
39:07
有点难是吧,跳不出来了是吧,就是东西忘得太快,因为没办法,也不怪你们,东西学的太多了啊,有时候该复习的时候就复习复习看一看。
我来说两句