我们知道每一次Java程序要在MySQL中执行一条SQL语句,那么就必须建立一个Connection对象,代表了与MySQL数据库的连接。然后通过Connection独享发送我们要执行的SQL语句之后,调用Connection.close()来关闭和销毁与数据库的连接。因为数据库的连接是一种很重的资源,其代表了网络连接、IO等资源。所以如果不适用的话,就需要尽早关闭,以避免资源浪费。
传统的JDBC操作就是这样的一种模式,这种操作它的劣势和不足是很明显的。想象一下如果我们要频繁地操作MySQL的话,那么就势必会频繁地创建Connection对象,底层建立起与MySQL的占用了网络资源、IO资源的连接。此外,每次使用完Connection对象之后,都必须将Connection连接给关闭并置为null,这又涉及到频繁的网络资源、IO资源的关闭和释放。这种对于大量的对网络、IO资源的申请和释放无疑是很耗时间的,直接后果就是导致性能急剧下降。
那么我们说的数据库连接池,会在自己的内部持有一定数量的数据库连接,比如通常可能是100~1000个左右。然后每次Java程序要通过数据库连接往MySQL发送SQL语句的时候,都会从数据库连接池获取一个连接,然后通过它发送SQL语句。执行结束后,不会调用Connection.close(),而是将连接还给数据库连接池。下一次Java程序再需要操作数据库的时候,就还是重复以上步骤,获取连接、发送SQL、还回连接。
这样的一种方式其优点是不言而喻的,首先我们的Java程序不用自己去管理Connection的创建和销毁了,代码上更加简洁;其次程序中只有固定数量的数据库连接,不会进行销毁,每次使用完还回来。那么对于短时间频繁进行数据库操作的业务来说,就有很高的意义和价值。也就是说如果短时间内,频繁操作10000次数据库,不需要对数据库连接创建和销毁10000次。整个应用程序的性能必然得到大幅度提升。
接下来,我们会手写一个简易的JDBC连接池辅助类来帮助我们更深层次的理解理论知识。