什么是“数据库连接”,真的吗?它是与您的数据库的会话,因此:
>存在客户端和服务器端会话状态
>存在与该会话相关联的事务
现在,由于您的客户端应用程序是多线程的,我怀疑只有极少数情况下您的设置才有意义,即:
>您不使用会话状态,甚至无意中(并且可能是供应商特定的)
>您不使用事务并始终自动提交
>即使使用自动提交,也可能存在竞争条件,因此请确保不会发生这种情况
>您非常确定每个语句只需要很少的时间,立即释放资源
在所有其他情况下,您希望每个客户端线程有一个连接,或者在响应/异步环境中,每个隔离的数据库交互至少需要一个连接.并且因为创建新连接(即初始化服务器端会话状态等)很昂贵,所以人们只需使用连接池.实际上,连接池内部只能有一个连接(根据您的要求),它仍然是您使用的良好抽象.那么为什么要编写自己的连接池呢?
关于您的具体问题:
So is there any point in using a connection pool?
除了非常简单的情况(见上文),通常有一个连接池是好的.
Can’t I just open a connection to my database at the start of the life-cycle and use that one connection forever, or will it time-out if inactive for too long?
当然可以. JDBC驱动程序或其他客户端库中通常有一个设置可以防止这些超时或重新连接.
这种方法的完美用例是迁移脚本,批处理脚本,简单测试脚本或简单的Swing应用程序等.所有这些都不需要连接池.
Do I absolutely have to call close() on my connection after I do something with it, or is it enough call close() on the ResultSet and/or Statement?
您应该在从DataSource.getConnection()获得的连接上调用close()(例如,当连接池实现DataSource时).
您不必在您自己管理其生命周期的连接上调用close().