介绍完第一个 api driver manager 之后,接下来我们来讲解第二个 api, ctrl next, 那么 ctrl next 刚才我们说了,它其实呢就是我们的数据库连接对象, 而这个数据库连接对象呢,也有两个功能哈,第一个功能呢,是来获取执行思考的对象,刚才我们用过通过 connection 点儿可瑞特斯迪特曼的方法来获取这个斯迪特曼的对象,那么将来我们就可以使用这个斯迪特曼的对象来执行斯科了。 那么第二个功能呢,还有一个非常重要的就是来管理事务哈,那么还是一样,我们在说这两个功能之前呢,我们先去 api 里边看一下这个 connection 这个接口, 那么打开 api, 我们来搜一下 connection 啊,好,回车,你发现是不是有两个,那么两个呢?我们看一下第一个是吗?要看啊, cico 包下的 a, 第一个是不是就是呀? ok, 那么这个 connection 呢,他是个接口,这个接口呢,他说是与特定的数据库的连接,其实呢,我们也称这个连接为绘画, 他说 connection 呢,可以执行 ceo 语句,并在连接的上下文中返回,结果其实你读完之后呢,你发现这个文档翻译的并不好哈,而且那个文档写的比较简单,所以呢,我们就不再看这个文档了,我们直接来说,那么第一个功能呢,叫做获取执行 ceco 的对象,那么这里边其实涉及到三个方法,我们要知道的 第一个呢,就是这个可瑞特斯迪特曼特,而这个方法呢,刚才我们用过啊,用它可以来获取这个斯迪特曼的对象,用斯迪特曼的对象是不是就可以来执行 celoe 依据了,而还有两个方法呢,其实也是来获取对应的执行 saco 的对象的一个方法呢,是 prepare statement, 这个 方法,他获取一个执行死扣的对象,叫做预编议的执行死扣对象,那这个对象呢,待会我们会重点讲解的,他用来防止死后注入的啊,这个我重点讲解,还有第三个叫做 prepared call, 那么这个方法呢,其实将来返回的是一个 coyboost, 他是来执行存储过程的对象的, 因为在买色扣里边存储过程并不常用啊,所以呢,这个功能我们就不再讲解了,我们将来主要会重点使用上边的这两个哈, 那么这个呢,没法演示哈,所以呢,我们在这一块呢,先不去重点讲这个获取执行 soco 对象的这个功能了,那么下来呢,我们来说第二功能,第二功能呢,就是 ctrl 有一个非常重要的事物管理的功能。 那么说到实物管理啊,我们首先先来回顾一下在买色号里边的实物管理,那么其实会遇到了三个操作啊,第一个操作呢,就是开启失误,用 begin 或者 star 的传 section 这个蛇口语句来开启对应的事物。那么第二个操作叫提交事物,用 come meet 来提交事物。第三个是回滚事物,用 robec 来回滚事物啊,而且呢,我们都知道买蛇口默认是自动提交事物的, 这是我们买色号里边的对于事物管理的色号语句以及一些机制哈。而在 gdbc 里边来管理事物呢,是通过这个 connection 对象来管理的事物哈, 那康莱神对象里边同样的定义了三个方法来对事物进行管理,那么第一个方法呢,叫做开启事物,用的是 set all to commit 这个方法,这个方法里边接受一个不玩类型的词啊, 那个不玩类型的这个值呢?如果将来你给他一个处表示了自动提交失误,那么如果给 phos 表示手动提交失误,如果设为手动 提交呢?就是开机十五万,那你来看这个方法名,方法名叫做赛的奥特卡密特,你设置自动提交吗? 那你如果给个 fos, 将来关闭自动提交,是不是就相当于要手动提交失误,就相当于开启失误哈,所以呢,我们要开的话,将来这里边传一个 foss 就可以了。 第二个方法呢是提交事物用的是抗蜜的方法,第三个是回滚事物,用的是 robec 这个方法。好,那下来我们来演示一下 conyx 里边对于事物管理的这三个方法哈, 那么我们打开 idea 还是一样,我们复制一个类啊,复制一下,这是我们第三个案例,然后这个地方写的是演示的 connection, c o n e c t i o n connection 这个接口,那么在这里边呢,我们来改一下注视啊,好,那么在这儿呢,我们就来模拟一个 事物啊,事物的操作,那么这一块呢,我们定义思考,我们定了一条,我们再来定义一条思考,第一 条是改一号数据,改成两千,我们改成三千,第二条是改成二号数据,我们也改成三千, ok 吧? 改完了之后呢,我们把这个名字改一下,第一个叫 ceq 一,第二个叫 ceco 二,没问题是吧?弄完了之后呢,接下来获取一个执行 ceo 对象也没有问题。再接下来我们是不是来执行 ceo 了?那么执行 ceo 这一块呢?我们把这两句话 我们给他复制一下,复制一下之后我们再写一份,对吧?这是两条执行,第一条执行的是四扣一,第二条执行的是四扣二,然后呢这个 ctrl 是 ctrl 一,这个是 ctrl 二,我们把这都改一下。 好,那改完了之后呢,就相当于我有两条色口语句,并且这两条色口语句呢,都是修改对 印的数据库里边的数据,那我期望这两条色口语句将来要么同时成功,要么同时失败,他们期望被事物管理起来,对不对? 那么被事物管理起来我们怎么做呢?这个地方呢?我们就需要在执行思考之前是不是开事务呀?那在哪执行思考啊?是不是在这个位置执行思考啊?所以呢,我们在这个位置是不是需要去开启事务, 开启事物,而执行成功了之后,那么结果处理完就证明执行成功了,那我们需要去提交事务, 是这样的吧,那么将来如果在这个过程中有但凡有一个位置出现了异常,我们是不是应该回滚失误呀?那你怎么能够在过程中出现异常之后能够加上回滚失误的代码呢?思考一下, 哎,非常好,我们这个地方是不是可以用我们加瓦里边提供的异常管理机制拆开齿呀?我们将来使用拆开齿,在开齿里边去补货异常,如果将来他出现了任何问题,代码是不是都会跳转到开齿里边去执行?我们在开齿里边是不是进行一个事物的回滚呢? 所以我们把这段代码选中,然后呢我们按个 ctrl 加奥特加 t 给他用拆开式的代码块给他 包裹起来,然后呢我们抓一个大个的异常啊,不抓死扣 except 是抓个大的,抓个大个的之后呢,将来不管这里边出现任何异常,是不是都需要进行一个事物的回滚,所以在这是回滚事物,对, 对吧?那在什么时候提交呢?是不是我们可以在这个地方提交事务, ok 吧,执行完了吗?没有问题了,坐这了是不是就证明 ok 的?好, 那么在这呢,我们开失误,我们也可以放到这个里边来开哈,那么这块呢,我们这样写开失误,怎么开呢?刚才说过是不是用 con 的有个方法叫做 set out to come meet 设为 false 就可以开失误了, 那么如果执行成功没有问题,提交事物是不是用 connection 对应的一个方法叫做 commit 方法啊?那么将来出现异常,跳到 catch 里边执行,我们使用 c o n d r roll back 方法来回滚失误, 那么这样写完了之后,我们来尝试一下啊,现在是不是正常的情况都是三千,那么也没有在这里边泡一场吧,没有的话呢,我们来看一下是否能正常执行成功呢? 来看两个一没有报异常,那么我们猜测数据库里边这两条一千是不是都会变成三千呀?没问题对吧? 好,那么接下来我们来造一个异常哈,在这个中间我们来手动造一个异常,硬特 i 等于三除零,现在肯定会出异常吧,那么出现异常将来一直行,那么这个位置呢,这两个是不是还是原样的?那么比如说我们把它数据改成两个一千的哈, 改一下,改完了之后呢,我们再来查询一下,你看两个是不是变成一千了,那么现在呢,虽然这个地方我进行了修改的操作,对吧?那么修改了之后呢,第一条是不是会执行成功?那么第二条是不是会执行失败?因为中间是不是出异常了? 但是呢,我有事物的管理啊,所以呢,第一条执行成功的,是不是也会回滚到开启事物之前的状态?所以我一执行完之后,大家说这两个结果现在是多少嘞?是不是还是应 应该是一千呐,对吧?好,来执行,你看是不是还是一千啊?并没有发生改变啊,这里边也出现异常了,那如果说你将来把这个事物呢?给他注视掉,我不进行事物的一个处理啦,对吧?不进行事物处理, 那你如果不进行事物的处理,那我这一块现在一直行的话,你注意看。好,来看一下, 第一条执行成功了,但是呢出现异常,第二条是不是没有执行,就跳,跳到 catch 里边打印一场了?然后呢,我们来看数据库,是不是第一个应该变成三千,第二个是不是还是一千啊?来看一下, 是这样的吧,数据发生了改变了,这样呢,是不是就不符合我们的期望了?好,那么对于这个 connection 对应的事物管理的这三个方法,我们也就介绍完了,我们把它还原一下哈,三个注视给他去。 第二,好,那么在这呢,我们简单的回顾一下, con next 里边是不是有两个功能,第一个功能呢是来获取执行斯科的对象,那么他有三个方法来获取执行斯科的对象,其中呢第一个方法呢就是我们用的可瑞特斯迪特曼特,然后呢返回一个斯迪特们的对象,这 个我们待会要讲解。还有第二个我们要重点讲解的就是 prepared statement, 这个对象也用 connection 的 prepare statement 这个方法来获取哈。 那么 connection 呢?其实还有第二个功能叫做管理事物,它里边设计到了三个方法,这三个方法分别是开启事物用 set out to commit, 给个 force, 提交事物用 commit, 回滚事物用 robec。 这里边非常关键的一点,你要知道扎娃代码里边如何来进行事物处理的方式,是不是用异常处理机制呀?拆开齿,在开齿里边进行事物的回滚哈。好嘞,那么对于 connection 我们就讲解完毕了。
粉丝7.8万获赞29.3万

介绍了一下 gdbc 控制事物的一个简单的介绍,那么接下来呢,我们来写一个银行转账的案例, 在我们的数据库里边,在 db 三里边有一张表叫做呃炕的表,我们把这个表打开,现在张三李四都是两千块,那么我们还是来写一写这个代码好,写写代码,我们再写最后一个 jdbc 的案例,叫做 jd 啊, jdbc 呆毛十好,呆毛十,然后在这里边呢,我们来去演示的是一个事物的操作,事物操作, 那么同样我们写一个转账的方法,转账的方法,这样吧,我们把它就写在闷方法里边啊。 psvs 写在闷方法里边,然后要去转账呢?首先第一步,你不管 怎么转账,你是不是要去获取数据库连接啊?获取连接,那么我们用 gdbc jdbcutuse 第二, get connight, 是不是 这样连接对象就获取了,获取了连接对象之后不要着急,我们记得我们之前是把这个玩意已经改成 改成四数据库了,现在要用看的表是不是改成数据库三就可以了。然后接下来,接下来把这个异常呢,我们去处理一下,处理完了之后,接下来获取了连接, 那么获取完连接之后呢?这样我们一次写到位哈,一次写到位,我们把这个 can x 呢,就给他声明到外边去,这个地方把它声明到外边去,待会我们要释放资源的,对吧?好嘞,把这个 ctrl x 呢写到外边去,然后呢接下来第二步,我们来去 定义,定义死口,在定义死口,好,定义死口,那么这个地方定义死口要转账,首先呢是不是得有两个死口,第一个死口,第一个死口是加钱,第二个死口是减钱,或者第一个死口是减钱,是张三商三减 五百,然后呢,里四里四加五百是不是可以了?两个色扣,其实这两个色扣你把它弄成一个也是可以的,但是我们写两个,第一个色扣呢,我们写一下死去类型的色扣,等于阿扑对头那个表和 cont 表,欧 由 nt 赛特赛特 bant b a l a n c 等于 d a l a n c e。 第一个张三减五百 就是减五百,威尔威尔 id 等于一,这个死扣就写完了。然后呢,第二个死扣呢,只需要把这个参数改一改就可以了,但是现在这个地方要注意, 我们现在写这些思考的时候,尽量尽量使用使用这个普瑞派的 steam 的。那么五百减多少钱?谁减?是不是这个操作应该是参数,应该是传递的参数,因为 你如果写张三减五百,只能是张三借五百块钱给李四,这样是不是不通用?所以呢,我们这样来做,我们把这个地方都给他替换成问号,都替换成问号,是不是可以啊?替换成问号之后呢,这个地方我们把它改成加,改成加,改成加之后呢,这也改成 问号,将来呢,我们给这个问号去复职,也同时把我们的普瑞派尔斯对他们的练习一下,一个四扣一,一个四扣二,好,这两个四扣写完了之后,接下来接下来第三步来获取这个执行 cello 对象。我们现在说了,用普瑞 pard sdet mant, 那么 ceo n 有个方法叫做普瑞 pardsdamt, 把色扣语句传进来,好,色扣一传进来,传进来之后呢,我们这个地方,这个地方返回一个普 play 的 steat 们的 pst mt。 好,这是第一个普瑞 parssdat 们对象没有问题吧?然后呢,我们再获取一个普瑞拍二 steam 的二,哎哎,稍等一下,把它复制一份。复制一份之后呢,我们再获取一个 普瑞派尔斯爹他们的二,两个都有了之后,那么我们把这两个都给他声明到外边去,都声明到外边去,方便待会我们释放资源。 好,把这行语句呢复制一下,复制一下,复制一下之后来第二个,两个都弄完了之后呢,我们在里边给他们去设置值就可以了。好,代码格式化一下。这两个都弄完了之后,第三步 做完了。第四步,我们是不是要设置参数啊?设置参数,那么这个参数,首先 pstmt 一点 赛特,第一个参数是一个金额,是不是问号?是金额,那么就是 double 类型的 double 第一个问号,然后设五百没问题吧?好,这是第一个 参数,那么接下来 pst mt 二点 a 一还是一点赛特,第二个参数是应特类型的应特,第二个参数我们 id 是一,好,这样就设置完了,设置完了的意思就表示了李张三减五百块钱,是不是这样的?然后同样我们把这个复制一份, 复制一份,我们设置第二个 proris 对他们的参数,第一个还是五百,第二个参数 id 变成二,这样是不是两个参数都设置完事了?设置完了之后,接下来我们就可以来执行这些色扣语句了,那么执行的时候呢?是 pst st 一点 xq 特执行的,现在执行是不是执行修改,那么修改呢,就是阿普贝特方法好执行一下,然后呢? pst mt 二点 xq 的啊,不对的方法也执行一下,两个都执行完了,我们就不进行结果的处理了,那么这个地方我们第五步就去来执行死扣,执行完了就完事,完事了之后呢,最后我们来去释放资源,在 fanner 里边我们释放资源,好 翻到那里面判断一下,不用判断了,我们直接用 gdbcutus br 可漏的方法用下边这个重载的 pst mt 一好逗号。然后呢, sun 这样是不是可以了,但是呢,这个地方要注意啊,我们在这个地方是不是写了两个,两个 ps tmt 就是普瑞派二十四的写两个,那么两个的话呢,我们都就就得把他们都关了,都关了呢,这样吧,我调用两次吧,那么第二次呢, ceo n 再关的话可能会出问 问题,所以第二次我 ceon 传个浪就行了。当然这个代码写的很不合规范啊,我们只是来演示事物而已,现在没有任何的问题,我们来运行一下这个代码,现在我没有给他加什么异常啊,没有加异常,那么没有加任何的异常了,我们来看一下这个代码到底好 不好使,好不好使,然后我们执行一下这个代码,走运行一下代某十 运行完这个呆没时。之后呢,来看一下,现在已经运行完了,程序并没有报错。我们来看一下这个表的数据和看的表,我们打开表, 哎,打开表之后呢,我们已经打开了,在这个地方我们查询一下这表的数据色 like 星 flom a c c, 偶有 nt 和 come on 的,好,查询一下 数据走,你看是不是变化了,哎,这个变得好像不太对吧,不太对吧,应该是张三,哎, 应该是张三,是不是应该变成变成几啊?是变成一千五,李四变成两千五呀,我们来检查下这个代码,四扣一,四扣二没有问题,设置参数一二也没有问题,在这个地方创建对象。哦,这个地方你看 注意写错了哈,我们 pstmt 二应该通过四扣二是不是获取啊?所以呢,这个地方再来执行一下,我们先把这个金额呢,我们都给他改一下,都改成一千算了。好, 全部都改成一千,现在都是一千块,都是一千块,一旦执行完了之后,张三应该变五百,李四变一千五,是不是就正确了?那么重新再执行一下, 注意看重新执行,灯亮了就执行好了,稍等。好,灯亮了,执行好了之后呢,我们再来查询一下,来看没有问题吧?没有任何问题,现在正常情况是 ok 的,现在我才重新把它改成一千块,再重新改成一千块, 改成一千块之后呢,我们手动的去制造一点异常,制造一点异常,在这个地方执行第一个执行完蛋之后呢,我们在这手动手动制造异常,那么比如说我们定一个 int i 等于三除零, 这个地方会报一个数学异常,零不能作为被除数,对吧?所以呢会报一个数学异常,那么下边这句话是不是就不会执行了?那么这个地方就会出现一些问题,我们现在在执行,在 执行肯定会报错。好,那么这个地方是不是出现了这么一个摆贼二字的问题?出现了这么一个问题之后,那么注意,那么现在我们来看这个表的数据,现在就会造成一些问题, 猜想这个问题,张三是不是钱应该减掉了?米斯钱,但是没有加上来看是不是出问题了?出问题了我们要解决,解决的方案我们也有,就是通过事物的管理, 那么怎么去管这个事物呢?我们就可以这样来做,我们可以这样来做,我们在这个地方获取了数据库连接之后,我们可以在这个地方去开启 事物。好,开启事务,怎么开呢? c o n dr 赛特凹凸卡密的射程 boss, 好,这样就是开启事物了,开完事物之后,如果执行到最后还是 是没有任何问题,我们在这个地方是不是提交事物? cun 点卡密的提交事物没有问题吧?好,在这个地方我们去提交事物。 什么时候进行回滚呢?我不管什么情况,只要这个方法里边出现了异常,不管出任何异常我是不是都回滚,那么一旦出异常了,是不是要进 kitty 里边?那么在 kitty 里边我们是不可以进行事物的回滚, 在这里边进行事物的回滚操作。回滚,那么 c u n d r d r rowbo 啊,哦,来来了, roope 在这进行事物的回滚,而回滚这个操作是有异常发生的,我们需要 red 开始一下,但是注意这个地方要注意这么一些问题,什么问题呢?首先第一个问题,在这个里边不管出现什么 异常是不是就轻易回滚,那么我们抓异常的时候是不是应该抓一个大一点的好,抓一个 sifi。 第一个问题是这个,第二个问题, 第二个问题就是我们这个 ceo nn 点揉败,可在回滚的时候有可能 ceo n 为纳,所以呢,在回滚的时候,我们应该判断一下,如果 ceo n 等于呢?我们在进行事物的一个回滚操作,一个回滚操作,当然这个地方如果你看的不习惯,可以把这个大括号加上, 那么这样做完了之后,做完了之后,我们这个代码就写完了,然后呢,我们再这样把这个数据呢都给他还原成一千块,好,一千块没有问题,好保存。 那么现在我们仍然在这个地方手动制造了一个异常,那么看一下,现在如果执行完了之后,数据没有发生任何变化,说明我们的事物管 是不是就 ok 了,一旦出异常,他会回滚到开启异常之前的这个状态,如果数据发生了变化,说明这个异常管理失败了,事物管理就失败了,我们期望他能成功啊。执行, 执行完了之后来看效果,稍等一下好,执行完了之后他还是报异常,没有任何问题,然后来看数据, 来看数据查询,你看数据是不是没有发生任何的变化,至此呢,我们这个异常或者说事物的管理就成功了哈,你需要在这个地方知道什么时候开事物, 在执行操作之前开事物,开完事物之后操作都执行完了,提交事物一旦出现异常,我们在开始里边去回滚事物,知道这么一个事物处理 的位置就可以了。好嘞,那么关于事物的一些操作咱们就说了一下,那么在这个笔记上记录一下什么时候开事物呢?我们在这个地方要记录一下在在执行 色口之前开启事物,然后呢?什么时候提交呢?当所有色口都执行完提交事物什么时候回滚呢?在 开始 c a 题 ch 中去回滚事物。好,这是这么一个逻辑啊。对于 gdbc 事物的控制我们就介绍到这个地方。

欢迎收看本期视频,本期学习 g a, d b c 连接数据库 g a, d b c 是 grry 语言中用来规范客户端程序如何来访问数据库的应用程序接口提供了注入、查询和更新数据库中数据的方法。 所以 gdbc 本身就是用来连接数据库的。本文我们就来了解一下怎么使用 gadbc 连接数据库。一、加载 gadbc 驱动程序在连接数据库之前, 首先要加载想要连接的数据库的驱动到 g v m grv 虚拟机,这通过 grvdendendelas 类的静态方法 成功加载后,会将 girry 的实力注册到 grry 们的视频内中。二、提供 gadbc 链接的 url 连接 url 定义了连接数据库时的协议,此协议数据原标识书写形式协议,此协议数据原标识协议在 gadbc 中总是以 gadbc 开始。 子协议是桥连接的驱动程序或是数据库管理系统名称,数据源标识标记,找到数据库来源的地址与连接端口,例如 miss 口的连接 url。 三、创建数据库的连接要连接数据库,需要向 word sql 点 gremes 请求并获得 cnx 对象, 该对象就代表一个数据库的连接。使用追问,那是的 get 方法传入指定的与连接的数据库的路径,数据库的用户名和密码来获得。例如。 四、创建一个 stet max, 要执行 sql 语句,必须获得 w 点 s q l 点 sit 实力。 sit 实力分为以下三种类型,一、执行静态 sql 语句,通常通过 sit 实力实现。 二、执行动态 sql 语句,通常通过普瑞佩瑞斯推特们实力实现。三、执行数据库存储过程通常通过开了 boste 实力实现具体的实现方式。 五、执行 s q l 语句 sit 们的接口提供了三种执行 s q l 语句的方法, xq 和 x q x, 一 如 thre 和 group 等。三、 xqux closchrie 用于执行返回多个结果及多个更新技术或二者组合的语句具体实现的代码。 六、处理结果两种情况,一、执行更新返回的是本次 操作影响到的记录术。二、执行查询返回的结果是一个 redoust 对象。 redows 包含符合 sql 语句中条件的所有型, 并且他通过一套 get 方法提供了对这些行中数据的访问使用结果及 redows 对象的访问方法获取数据。 七、关闭 gadbc 对象操作完成以后,要把所有使用的 gadbc 对象全都关闭,以释放 gadbc 资源。关闭顺序和声明顺序相反,一、关闭记录,即二、关闭声 名。三、关闭连接对象。 我们在完成了上述的步骤之后,基本上就完成了 gdbc 连接数据库的操作。谢谢收看本期视频,喜欢请关注哦!


一颗 lips 两种连接数据库的方式,以买色客为例,先去官网下载 gdbc 驱动包,准备好了吗? 第一种方式,使用 datasos explore 窗口右键数据库连接新建,选择 messco, 下一步,添加一个驱动,选择五点一,选择炸 list 菜单,把原本的删掉,点击添加,选择刚才下载的驱动炸包, ok, 填写数据库名字,填写密码,测试连接成功,点击完成,这时候就可以使用 eclips 查看买色购数据库中的表数据了。 第二种被广泛使用的插件 debuber 下载安装,安装完成之后切换到 debuber 视图,在数据库导航菜单下新建数据库连接,选择 masco, 下一步,填写数据库名,填写密码,编辑驱动设置,选择 额外的驱动库,添加文件,选择下载的驱动文件测试连接连接成功就可以查看数据库表信息了,使用起来非常方便,快去试试吧!

介绍完 jdbc 的快速入门之后啊,接下来我们来讲解 jdbc 的 api 详解,那么刚才我们在写快速入门代码的时候呢,其实遇到了很多的 api, 比如说 connection 啊,比如说 statement 呀,那么这一张呢,我们就把这些 api 详细的介绍一下, 那么首先呢,我们先来看一下我们要讲哪些 api 哈,我们要讲这么多哈,第一个呢是 driver manager, 刚才我们用过通过他来获取 connection 的连接对象,第二个呢就是这个 connection, 第三个 statement, 这三个我们是不是都用过了? 后边还有两个哈,一个是瑞子刀的赛特对查询结果进行封装的这个结果及对象,还有一个呢是 prepared statement, 这个呢是这个 statement 的增强版哈,那么接下来我们先来说第一个 driver manager, 这个 driver manager 其实翻译过来呢,叫做驱动 管理类哈,你看 driver 是驱动的意思, manager 是管理的意思,驱动管理类,那这个类啊的作用有两个哈,第一个呢是注册驱动,第二个是获取数据库的连接,那么对于这个获取数据库连接,刚才我们用过吧,通过 driver manager 的静态方法 get connection 来获取数据库连接, 那他还有个功能叫做注册驱动哈,那正式我们在讲这两个功能之前呢,我们先去 gdk 的官方文档看一下官方对这个 driver manager 的一个描述啊,好,打开我们的官方文档,我们用的是 gdk 的十一这个文档哈,我们来搜一下 d r i v e r driver manager, 搜到了之后呢,这个 driver manager 啊,其实是个类啊,这个类呢,下边儿有一些文字性的描述,我们简单的看一下 driver manager, 他说是管理一组 jdbc 驱动程序的基本服务,听不懂对吧?包括你往后边看,越看越看不懂哈,所以呢,这个官方文档啊,说实话,这个描述啊,写的非常的抽象哈,那接下来我就跟大家讲一讲哈,其实呢, driver man 在这,他是一个工具类哈, 这个工具类呢里边你看都是静态的方法,那么将来呢,我们直接通过类名打点掉方法名就可以了,对吧?那么这里边呢,其实有两个方法非常重要,第一个方法就是刚才我们用的这个凯迪 conlex, 这个 getconlex 呢,是来获取数据库连接 conlex 对象的。 还有一个方法呢,叫做 rajestr driver 里边接收一个驱动类对象, ray jester 是注册的意思, driver 是驱动,就是注册驱动这个方法。那么讲到这儿啊,有同学有疑问了,老师,刚才这个注册 驱动可不是用 driver man 在这完成的呀,刚才我们是不是用的是克拉斯蒂尔 fo 内幕完成的?我们是通过这行代码将这个 driver lay 是不是加载进内存的?我们没有用 driver man 在这呀, 那我们点开圆码一看你就知道了,我们点一下这个圆码,点进去之后呢,你会发现,哎,这个 driver 类是不是麦斯扣提供的?麦斯扣提供好了这个 driver 类之后呢,它有个静态代码块,而这个静态代码块里边的代码是不是写的是 driver manager dear registered driver? 哦,原来真正注册驱动是不是由这个 driver man 这干的?而这个静态代码块是不是又会随着这个类的加载而自动的执行啊,所以我们的代码才会这样去写哈,这样写完了之后,那么将来这个麦斯扣提 中的 driver 的驱动类一加载进内存的时候呢,不需要调用它任何方法,那么这个时候它对应的静态代码块是不是自动执行了?执行完事之后,这个 driver manager 就把驱动给注册上了,就是这么一个逻辑哈,好,那么第一件事,注册驱动,我们就说了一下,那么这里边有个小细节我说一下, 就是在买四扣五之后的这个驱动炸包哈,这行代码可以不写了,就是省略了就可以不写了。注视掉来看一下,注视掉之后呢,其实也不会爆错的哈,完全没有任何问题的,你看是不是也 ok 啊,没有爆错吧,为什么呢? 原因呢?其实是因为这样的哈,在这个 level 下边,我们是不是有个买色扣的驱动炸包,在这个驱动炸包里边呢?是有个 mate info 目录的,这个目录下边有个斯维斯目录,这里边有个文件叫做加瓦点思考点儿 driver, 这个文件里边其实就记录 你对应的这个驱动的类的名称哈,你可以看一下,你看是不是有这个类的名称,对吧? come 点买 ceco 点 gdbc 点 driver, 对吧?他会读取文件,把这个类名对应的字母串读取出来,然后呢,放到这个 class 点 follow 的方法里边作为参数的 哦,就不用我们再写了,所以这行代码将来不会写的哈。好,那么这个事呢,我们就说了一下注册驱动的功能哈,那么接下来我们回到这个 ppt 里面来看一下注册驱动,原来我们是这样写代码的,通过查看原码发现这个 driver 类里边有一个静态代码块,底层呢是用 driver manager 来做的哈, 那么对应的提示我们也说了一下,第一行代码克拉斯点符号内幕可以省略不息。那么接下来我们来说 driver manager 的第二个功能。第二个功能呢,是来获取数据库的连接对象 get connect 方法,那么返回一个 对应的 connection 连接对象,这个方法很简单哈,但是这里边有三个参数,其中的后两个参数,用户名密码我就不详细讲解了。第一个参数 url, 我们来重点说一下, 这个 url 呢,是代表的是连接的路径,这个连接路径呢,有一个固定的语法哈,我们先看一下这个语法呢,是 jdbc 冒号买色扣,冒号杠杠,前边这一串啊,是协议,这个协议呢,其实就是一个固定的书写格式啊, 那么这一块呢,是 gdbc 买色扣的协议啊,就是 gdbc 的程序连接买色扣数据库的这么一个格式啊。 ok, 那么后边跟上的对应的是你的 ip 地址,冒号端口号,你要连哪个数据库啊?你是不是把数据库对应的 ip 给他指定一下?那么你要连接那个数据库的端口号是多少呀? 是不是要指定一下,对吧?比如说我们要连接的是本机的,是幺二七点零点零点一,然后呢端口是三三零六,是不是这样的?那么当然在 ip 这一块呢,你也可以写域名,那本机的域名呢,就是 local house 的,你这块也可以写 local house 的, 那么在下边呢,你要跟上你对应的数据库的名称,那么数据库我用的是 d b 一,那你用了别的,你可以改这个名字是没有问题的, 那么在后边哈,这个语法后边还可以跟上问号,加上对应的参数的见之段,可以写多个,中间用 and 隔开就可以了,这是一个完整的 url 的语法哈。好, 那有了这个语法之后呢,我们刚才也用了一下,其实呢,里边还有两个小的细节,我们也来说一下。第一个细节呢是,如果你连接的是本机的买色和服务,并且买色购的服务 默认的端口号是三三零六,那么你的 url 可以简写啊,简写成什么样呢?你看一下 gdbc 冒号买色扣杠杠前面是不是一样的,那么中间呢,就省略了你对应的 ip 和端口,后边直接跟上数据库的名称,如果有间之对的话,把间之对也写上, 我们可以来演示一下这个事情哈。好,那么在这呢,我们这样,我们复制一个这个类哈,复制一份,复制一份之后呢,我们起个名叫 demo 二杠 d r i v e r driver manager。 好, 那么这一块呢,我们写个注视啊,这块呢是 jdbc api 的详解哈,我们演示的是 driver manager 哈, a n j e r。 好,那么在这一块儿啊,我们刚才说过,我们说这个地方的驱动注册是不是可以省略掉,可以不写的,对吧?好,那么 第二个地方呢,这个 u r l 这一块, u r l 这一块呢?如果哈,如果你连接的是本机买色口,并且这个端口是默认的三三零六,那么 可以简化书写啊,简化书写什么样呢?就是把这个 ip 和端口干掉就可以了,不写了,嘿,就这样就可以,来试一下行不行啊, 运行一下如果不报错是不就可以啊,来看一下,一打印出来了是不是没有报错呀,说明他是没有问题的, 这是我们的第一个细节,说了一下,那还有第二个细节哈,就是可以配置这个 uss s l 参数等于 fouse, 然后呢进入安全连接方式来解决。警告提示什么意思呢?也来说一下,打开 id 二,你注意看哈,刚才运行完了, 一没有问题,那么在这个一的上边呢,是不是有一条红色的输出啊?这个红色的输出呢,其实就是一个警告啊, 这个警告的意思呢?就是说啊,现在这个买车口啊,我们用的是五点七的版本吗?是个高版本,这个高的版本呢,他呢建议你使用一个比较安全的连接方式,就是 ssl 的安全连接方式。 安全连接方式呢,现在呢,我们并没有去配置哈,我们并不使用它,原因呢是使用这种安全的连接方式呢,需要经过复杂的配置,而且它的性能会降低大概百分之二十左右啊,所以呢我们不使用, 那不使用,你又期望他不要给你这种提示,看着烦怎么办呢?有提示的哈,往后边拉一下,然后呢这个地方呢,他告诉你的说如果你不想用的话呢,你可以设置一下 use s s l 等于 first, 这样去做, 做一下就没有这个提示了,就相当于禁用了这个安全的连接,告诉他我不用,你不要给我提示了。好,复制一下,复制一下之后呢,我们直接在后边用个问号,然后呢把这个粘过来就可以了,粘过来之后呢,我们再来运行看一下,这个提示还有吗? 哎,运行完之后呢,你看这个提示是不是就不见了? ok 啊,那么这两个细节我们就说了一下,那么当然啊,这后边将来你可以加继续加其他的参数,中间用暗的隔开就可以了。那么至于加到什么参数呢?我们具体用到了之后我们再来讲解哈。 好,那么对应的第一个 driver manager 这个类呢?我们就讲完了,这个类那边有两个功能哈,第一个功能呢是注册驱动,第二功能是来获取数据库的,连接好 drive manager 介绍着这块。

这就是我们目前最主流的数据库连接方式, c、 d、 d、 c 啊。 呃,这是哪啊?哎,你在干什么?搞这么麻烦就用 j、 d、 b、 c 连接数据库啊,山顶洞门吧,用 j、 d、 b、 c 买菲力士不香吗?

刚才呢,我们说到 gdbc, 说白了就是一组 api, 是一套公共的接口,那到底什么是 gdbc 呢?咱们过来进一步的分析分析。 那之前呢,反复的跟大家强调过,我们说以后我们不管俗做多么牛的应用程序,无非呢都是操作数据, 那么这些数据呢,就涉及到一个存储,那么这些数据的存储呢,大多通过各种关系型数据库来完成,然后我们再利用扎腕应用程序连接远程的数据库,再对数据库中的数据进行一系列的增山改查操作。 那么这时问题就来了,大家我们说数据库厂商是不是有很多种啊?哎,有买 circle, 有 orico, 有微软的 circle server, 有 ipm 的 db two 等等等等,很多很多种,那么这时大家 要知道,他不同厂商提供的数据库啊,他的内核都不一样,内核都不一样,这就意味着什么呢?就意味着他们的连接方式都各不相同, 那么如果是这种情况的话,那么比如说我们扎腕应用程序啊,要想连接买三口数据库,那要单独写一套连买三口数据库的代码, 如果要连 oreco 数据库呢,要单独再写一套连 oreco 数据库的代码,连三个三码,要单独写一套三个三码的代码,连 db 兔,再写个 db 兔的代码,那这是不是也太麻烦了, 对吧?我们光那么多的数据库厂商,我们光写连接的代码就没完没了了,这就意味着我们渣玩应用程序的可移植性超级无敌的差,那么这就相当于一个什么意思呢?比如说, 比如给大家举个例子,比如说啊,电脑上我们发现是不是都有个 usb 接口啊?哎,我们发现那个 usb 接口吧,他又能连键盘,又能连鼠标,又能连摄像头,对不对?那么假设啊,咱们假设电脑采用的思想是什么呢? 大家都知道鼠标、键盘、摄像头,他们的功能是不是都不一样?那么如果说电脑啊,为了支持鼠标的功能,单独为鼠标建一个接口, 如果电脑为了支持键盘的功能,单独为键盘建个借口,连摄像头呢?又单独为摄像头的功能建了一个借口。 而且大家注意,鼠标光鼠标的厂商是不是就有很多很多种,比如说有雷蛇的,有逻辑的,有双飞燕的等等等等,那每个鼠标厂商他提供或者说他 研发的鼠标的功能是不是也都不一样?那么如果电脑采用这种思想的话,那大家可想而知这个电脑最终会是一个什么样的状态,那就全都是口对吧?别的都不用有了,都是口, 因此电脑是怎么做的?哎,电脑他是不是提供了一套统一的规范呢?这个规范就是 usb 接口, 他的思想是什么呢?他的思想是,你的这些设备要想在我电脑上应用的话,就必须严格按照我制定的这套规范去 执行,那么这个就是 usb 接口,它提供的规范的同时,大大提高了通用性能。理解这个 事吧,哎,大家要注意去理解,那么问大家一嘴对吧?我们说,那你既然设备上他是不是都有功能啊?那问大家一嘴的是, 那你说这个鼠标啊,键盘、摄像头他们的功能的实线是电脑提供的呢?还是鼠标等这些厂商提供的呢? 思考一下。哎,那我们说那是不是都是对应厂商提供的功能的实现呢?因为这些功能的实现只有对应的厂商他们才最清楚吧?这就是为什么咱们每次新买一个鼠标键盘,等 他第一次连接电脑的时候呢,右下角都会弹出一个框,框中写正在安装驱动。那么实际上那个驱动是个什 什么东西呢?就是那个设备具体功能的实现,听懂吧。哎,这就是 usb 接口的强大指数,它提供规范的同时大大提高了统用性,可以连大多数的外接设备, 听懂这意思吧? ok, 那这个道理大家懂了。回过来再看我们这幅图,我们刚才怎么分析的来着?我们说 不同数据观察商,它的内核不同,它的功能连接方式是不是都不相同啊?哎,那我说我渣玩英雄程序要连买 sippo 搞一套,买 sippo 的代码,连奥瑞口来个奥瑞口的代码,三个 sirk、 db two 都来套代码,那可一直性极差,我 全都是连接的代码,别的功能不用写了。因此我们怎么搞?是不是也学学人家 usb 啊,也学 人家电脑啊?我们在这之间是不是也搞一套规范,是不是也搞一套规范?然后呢?我们是不是只需要面对这一套规范即可呀? 然后思想就是,如果你的这些数据库场上,要想在我扎瓦应用程序上进行应用的话,就必须严格按照我制定的规范去执行,那这就是我们的思路。 朋友们,那么大家试图想一下,我们到目前为止有没有学过一个制定规范的技术呢? 那就是接口,对吧?咱们之前讲接口的时候,是不是反复给大家强调过啊?当然那个时候大家呢还不能完全体会到接口的强 指数,那么在这就可以体会了,实际上接口他提供的就是规范,提供规范的同时大大提高了通用性, 听懂吗?那么接口啊,它里边的功能是没有具体实现的,那么我们说那接口是不是得需要实现呢?那么这一组接口提供实现,那么这些实现谁来提供呢? 那就是厂商,所以说你的这些厂商要想在我扎瓦应用程序上运行的话,都得必须针对于这组接口提供 线,而我们要做的仅仅是面对这一套统一的规范即可。比如说我们要连接数据库,我们只需要调用一个叫做 connic 方法即可,我们只需要调 这一个方法,我说我要连买 circle, 他就连买 civo, 我要连奥瑞克,他就给我连奥瑞克,听懂这意思吧。哎,所以说 大家此时注意,我们呢,管买丝儿口数据库,针对于这一组接口提供的那一大堆实现类,我们称之为叫做买丝儿口驱动。 我们管 oraicle, 针对于这种接口提供的那一堆那一大堆的实现类,我们统称为 oreco 驱动,那当然 surp server 驱动, db two 是不是也有驱动啊?那这个就是这样的, 对吧?哎,实际上是这样的,我们只需要面对这一组统一的规范即可,然后数据库厂商对这些提供具体 功能的实现,因为连接数据库啊,各个数据库厂商的功能啊,是只有他们自己最清楚, 听懂这意思吧,那么接下来我们实际上学这个 dbc 学的是啥?是不是学的就是这一组 api 这组接口啊?哎,这就是 gdbc, 大家一定要注意理解啊,注意理解, 那么呢,大家注意,我们说了,那实际上厂商提供的那些驱动啊,说白了是不就是一大堆的实现类啊?那么我们渣玩应程序,那能不能绕过这组接口,直接去创建人家实现类的实力呢? 那肯定能啊,咱们都学过继承和多肽,我创建人家实现类的实力有什么不行的,可以,对吧?但是大家注意,我如果要连买 circo, 要创建这个类的实力,要连奥瑞口, 要创建这个类的实力,要连上个厕所,要创建这个类的实力,那是不是又回到了原点呢?又变得可移植性非常差了。所以说呢,虽然我们可以绕过这种接口直接去扭人家厂商提供实现类的实力可行,但是不建议,因为这意味着 咱们英雄程序没有更好的可移之性,就回归一到原点了,这种接口白提供了。听懂这意思吧,几乎白提供了,可以这么说, 所以说可行,但是不建议我们要做的什么,我们的目的就是面对这一桌统一的规范, 要想连接,我就掉一个方法,告诉你,我要连买色口,我要连奥瑞口,你就给我动态的切换,听懂这意思吧,哎,这个要一定要先理解,待会咱们代码层面那就变得非常 简单了,所以说通过这大家应该明白了,这个 dbc 说白了就是一组 api, 一组接口,但是这组接口呢,包括两个层次,一个呢就是面相应用的 api, 叫做扎腕 api, 它是一组抽象接口,它是供我们开发人员使用的, 这组接口里边包括了我们说连接数据库的考耐克深呐,执行 celoe ego 的 stadmint 呀啊,以及我们说执行 ceocoeo ego 啊,往数据库 服务器发送色购语句,比如说查询,查询的话是不是得有结果呀,拿到结果我们怎么处理呀等等。这一组是面向我们开发人员使用的,那么当然还有一组,那是面向数据库的 api, 称之为叫做扎哇 driver api, driver 是不是就是 驱动的意思啊?那这左一排那是供开发商开发数据库驱动使用的,是由数据库厂商提供实现的,跟我们是不是就没关系了呀?所以说大家此时要注意啊,注意 gdpc, 它是散公司提供的一套用于数据库操作的接口,扎瓦成卷,只需面向这套接口编程即可,不同的数据库厂商 需要针对这套接口提供不同的实线,不同的实线的结合即为不同的数据库的驱动,那么这个过程我们就称之为叫做面向接口编程。 那么咱们在学基础的时候,大家完全体会不到接口的强大之处,那么到现在我们就 可以体会到接口的强大之处了,听懂吧,是不是多想想这个 usb 呀,我们现在是不是只需要面对那一组统一的规范呢?提供规范的同时就大大提高了通用性,这就是面向接口变成 ok 吧,要注意理解。那么这里提到了说 gdbc 驱动程序呢,他有这样如下几个分类,有这么四种,其实呢,咱们都不用管,咱们只关心第四种即可,其他的呢,我们简单看一眼即可啊,就稍微了解一下。第一个呢,称之为 odbc 啊,我们要认识这个东西, odbc 是个什么东西呢? 他是为了在 windows 下啊, windows 平台下提供的一种统一的访问方式。那看到这大家应该已经看到他的弊端了,他是不是有局 天性啊?哎,不能跨平台,温都是下的,他最大的优点呢,是以统一的方式处理所有的数据,但是他有个致命的缺陷,就是温都是平台的对吧?通常服务器那都得是,对吧,拎就是平台的啊。 而扎吧最大的特点就是跨平台,他限制在了 windows 平台,那肯定不行。与此同时呢,他过程也非常的麻烦,效率也比较低,你看 他要面对的是 gdbcapi, gdbc odbc 桥,再面对个 odbcapi, 再通过 odbc 层访问手机库,所以说他的效率是比较低的,我们是不会使用他的。 第二种方式呢,就是部分本地 api, 部分渣玩应程序。那么当然大家与此同时也看到了这个过程,我还要在本地安装一套本地的 api, 所以说也非常 常的麻烦,我们也不使用。那这种呢,跟刚才的类似,我们还要多一个应用服务器,再面对一个厂商提供的本地 api, 过程麻烦不用,我们只关心这一种,就是什么呢? 就是通过网络直接与数据库建立连接,这个远程的连接,咱们之前是不是学过网络编程啊?他底层是通过 so kida 完成的, 也就意味着什么呢?我们只需要面对一套 gdbc api, 再通过人家厂商给我们提供的 gdbc 驱动,直接就可以连接远程的数据库了,哎,既方便速度又合适, 听懂吧,这个才是我们需要学习。好吧,行了,那所谓的 gdpc api 是什么? 咱们这几天就学这几个东西,对吧?比如说有获取代表连接的 comexin 啊, 然后呢?用于发送色口语句给数据库服务器的 sendman 的啊,用于结果级的处理的,瑞造的。大家注意这是不是都是接口啊?这都是一大堆的接口,那么这一大堆接口的实现谁来提供的? 数据库厂商他们提供的,他们功能有什么特点咱们不用管,我们只需要面对这组统一的规范即可。哎,我要获取连接,我就调用连接的方法,至于人家数据库怎么连接的那些细节,不用我们过多大关心 好吧,哎,那么这我们搞定了,接下来我们该考虑啥了?那就是怎么编辑,对吧?