一、连接池的好处?
数据库连接池就是把数据库连接放到一个池子里面,需要使用时就去取,这样的话,就不用每次都自己获取连接了。
①普通方式获取连接
用户每访问一次数据库就要获取一次连接,这样就会有几个问题。
- 连接使用完后就会被销毁,造成资源浪费。
- 如果用户有很多个,要获取很多次连接。
- 频繁的连接数据会造成资源消耗过多,从而使数据库死机。
②连接池获取连接
连接池的好处在于:
每次使用完连接后将其放回连接池,资源重复利用,更能提高程序性能。
无论多少个用户,都只需要从连接池中获取连接就可以了。
二、自定义连接池
事实上关于连接池已经有框架将其封装好了,我们可以直接用,但现在是学习阶段,知其然也要知其所以然,我们不妨自定义一个连接池,看看具体是如何操作的,并且这样也能更好地去学习连接池框架。
①实现DataSource接口
dataSource是Java中的一个接口,也是Java制定的一个规范,不同的连接池都需要实现这个接口。
MyDataSource是我们自定义的一个连接池,自然也是需要实现该接口。
②创建连接池容器
为什么要用LindkedList?
连接池中的连接被取走,相当于删除了连接池中的连接,用户用完连接将其还回连接池,相当于增加了连接池中的连接,所以连接池要经常地进行增加和删除。
LinkedList集合的底层是链表,特点增删快查询慢,所以选择使用LinkedList。
③初始化连接池
也就是自定义连接池的构造方法,通过参数count可以指定连接池中连接的数量。
④从连接池中获取连接
从连接池中拿走了一个连接,也就相当于将连接池中的该连接删除了。
⑤用完将连接还回来
自定义一个backToPool()方法,使用完连接后调用该方法将连接还回来。这也就相当于将该连接添加进连接池中。
自定义连接池写完,做一个测试:
①创建连接池
我们这边给连接池初始化6个连接。
②获取连接
现在只需要从连接池中获取连接就好了。
③预编译以及处理结果
④释放资源
使用昨天封装在工具类JdbcUtil类中的release()方法,其中连接不需要被释放掉,用null代替。
⑤连接还回
连接使用完了之后将其还回到连接池中。