了解一下连接池!!!!

为什么会出现连接池呢??

你想过没?

  好吧。原因就是因为因为在还没有连接池这个概念之前,就没有一个统一的标准,这时候每个互联网公司就都有自己的标准,所以他们生产自己的jar包,自己做自己的标准。

  后来懂吧,总会有一个人站出来,没错那个人不是我,唉!!

  就是sun公司啦!

  定义了一个规范的标准  (连接池的规范接口  javax.sql.DataSource,   连接池对象  DataSource, 

  增删改查 prepareStatement,   连接  Connection 等接口)

  拿来就用主义开始发扬光大!

  目前呢,主流的连接池有  dbcpc3p0

  

  对了,连接池的主要作用是为了提高性能,而不是为了创建与数据库的连接

  那连接池是通过什么方法来提高性能的呢,而且这个性能又是只哪里的?

  ---------------------------------------------------------------------------------------------------

  不知道你们写没写过jdbc的数据库连接

   

   

  我们知道,我上面这张图片是只有updata操作的

  当我们想要执行其他操作的时候,我们得重新写一遍其他操作的代码

  那就让我们来看看这段代码写的是什么吧

   这一句是sql语句嘛,大家都懂

  

   这一句是数据库连接,

   这句等号后面有个 c 不知道你们能不能理解,这个c就是指上面的数据库连接,而prepareStatement(sql)就是connection自己本身的方法 

  PreparedStatement 是”独立“”的一个预编译类,所以有人就会说,预编译类又是什么鬼东西

  :就是能够对sql语句进行预编译,预编译就像是你考试前有复习的样子,说起来我可真是太痛恨你们这些考试有复习的人了!(预编译包括检验语法跟格式)

  所以预编译就会让你的印象提高嘛。就能更加高效地编译数据库预计

  

  

   我们已经预编译的mysql 语句中的问号怎么办呢?

  这个呢,就是ps中占位符的意思

  后面的1指的就是sql语句中的第一个问号

  而bean.getProduct().getId()就是从其他方法中取出来的一个id值

  包括底下的几句,都以此类推!

  然后就到了

  

  就是执行的意思

  等一下!!!!!!!!

  我好像从来没有过关闭数据库这个概念诶!!!!

  淦!

  

  那就来说说怎么关闭数据库吧

  这里连接数据库是用到Connection嘛

  关闭当然也是用这个Connection

  那因为我们这里吧Connection 实例化成c

  那就直接c.close();

  这样就能直接关闭数据库了

  但是为什么我们做练习的时候好像从来没有这个关闭数据库的概念呢???

  我的天

-------------------------------------------------------------------------------------------------

  不过我们在用这个方法的时候,每次都得建立连接这是要的

  而连接池就不用每次执行的时候都建立连接

  连接池的原理就是

  你建立一条道路,当你不用走这条路的时候,他也会在,(也就是缓冲池的原理)

  而你不用连接池是时候,就像是你每次走路的时候都得一遍铺路一遍走, 

  可想而知,当有一大波人袭来的时候,你就会来不及,从而会用到大量资源,

  导致程序性能变差,影响使用,

-----------------------------------------------------------------------------------------

  那我们来看一下连接池是怎么来分配的

  不对,原理我已经说了

  卧槽,这个真的太多了!

  首先我们还是得建立与数据库的连接嘛

  不连接数据库我们肯定是不行的

  

  所以这一块就是连接数据库

  看不懂的话就把浏览器关了,睡会觉去吧

  !!!!!!!对哦,因为我这个是在hibernate中截图过来的,所以可能会有点不一样,给您说声抱歉!千万别被误导了

  

  

  这个是mysql的方言,就像我和你的方言不一样,我听不懂你的,你也听不懂我说的方言,所以我也看不懂mysql的方言

  好吧

  

   这个是指一个hibernate的版本

  

    这个是为每个session创建一个Session 

   

  

   

  这个是指在控制台打印出mysql语句

  是不是很得劲

  

   这个是指自动更新表,当然是数据库中的表

  

   重要的是这个嘛

   

   版本嘛,一看就知道、

  

   最大连接数为20

  

   最小连接数为5

  

   获取连接的超时时间限制,如果超出这个时间,会抛出异常。单位是:毫秒

  

   最大的PreparedStatement的数量

  

   每隔3000秒会检查连接池中的空闲连接,没错是秒

  

  我的天,乍一看这个就是连接池吗???

  实际操作有什么具体的不同吗????

  等一下,有没有发现他的mysql语句不见了,没错,他把数据库连接跟操作分离开了,

  你想要执行的mysqlyu操作可以单独执行,不用再上面那样!

  还有就是关闭问题

  我透!

  在hibernate 中可以直接创建工厂来运行c3p0的语句

  那就先来说说在hibernate 中的是怎么做的吧

  来个截图好了

  

   首先建立工厂嘛、

  然后开启工厂存到Session中

  接着就是开始事务  

  然后就创建查询! 就是sql 语句,

  接着事务提交,

  就可以关闭Session

  再关闭工厂!!

  这就是在hibernate中的c3p0连接池的操作!

  那要是不是在hibernate中呢

  

  不是!对不起,我还没有用过不用hibernate 的c3p0连接

  还会有另外那一个

  等我过几天重新更新

  是很多天

  还有一些人说其实c3p0在高并发的时候性能回急剧下降

  推荐是用druid的

  下次一定试试

  

  

    

  

  

  

原文地址:https://www.cnblogs.com/healer777/p/12117208.html