JDBC 访问数据库完全详解(三)

概述

但是在实际的开发过程中,“获得资源”和“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况下我们是采用连接池技术。

所谓的连接池技术,其实它是一种用池来管理连接「connection」的思想,我们需要 connection 的时候不用自己创建 ,而是从池中直接获取 connection 对象,用完了再放回去,而且还可以重复使用。

今天我们就在之前「使用 properties 配置文件」的基础上结合连接池技术来操作数据库,关于连接池今天主要介绍自定义连接池以及方法增强!

自定义连接池

一. 自定义连接池「核心代码分析」

可以看到,我们自定义了一个连接池实现了连接池「DataSource」接口,并重写了 DataSource 的全部方法「这里部分已省略」。

我们首先创建了一个 LinkedList 集合作为“池”,与此同时,创建5个 connection 并将它放在了“池”中,这里之所以选择 LinkedList 集合是因为要经常进行“移除”和“添加”操作;接下来重写了获得 connection 的方法 getConnection() 以及定义了一个将connection用完放回“池”中的方法 backConnection(),在我们从“池”里拿 connection 的时候,为了保证当前的 connection 只供给一个线程使用,所以我们采用了 remove()方法从连接池中移除,要归还“池”的时候使用 add()方法添加到 “池”中。

二. 测试

核心代码:

可以看到,我们使用了自定义的连接池来完成了数据库的插入操作,代码很简单,还是那几个步骤,我们来看看运行效果怎么样?

okey,数据已经添加到数据库成功了。

自定义连接池「方法增强」

我们知道,在上面一种方法中,我们通过 getConnection() 方法来获得连接,并通过 backConnection()方法将其放回到连接池,但其实这是美中不足的,如果用户调用了 conn.close()方法,那么连接将会被彻底的释放,“池”中不再有连接。

所以,如果我们想实现即使用户调用了 close 方法,连接也不会被彻底的释放,而是仍然归还给“池”,那么我们就需要对 close 方法进行增强!

一. 自定义 Connection 实现接口并重写 Connection 的所有方法

核心代码

二. 自定义一个连接池接口

这个跟之前的自定义连接池思想是一样的,只是在获得 Connection 的时候用了自定义增强版的 MyConnection,通过以下核心代码就可以获得连接:

三. 测试

核心代码:

看看效果如何:

可以看到,向数据库添加数据完美成功!

总结

以上就是关于自定义连接池以及方法增强的相关应用和介绍,其实我们一直都是在用 JDBC 来操作数据库,只是在这个过程中对操作进行不断的优化和改进,提高性能,方便我们后期的维护。

文:dolphkon

封面图:来源于网络

PS:本公众号内容属于原创,文章通俗易懂,重在思想,好看的皮囊千篇一律,有趣的灵魂万里挑一,如果你喜欢,欢迎关注我的公众号,「ID:androiddevup」在今后的学习过程中,我们一起交流学习,互相提高!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180415G0JSQA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券