JTDS driver - Connection pooling vs Connection pool
我离开Java EE已有一段时间了,但是我对所有这些东西都有基本的了解。
我在这里阅读JTDS文档:
http://jtds.sourceforge.net/features.html
它说它提供语句池和连接池,但不提供连接池实现。
假设JTDS驱动程序本身提供了连接池,
那为什么我需要一个连接池(如DBCP)呢?
换句话说,该连接之间有什么区别
JTDS提供的池和功能齐全的连接池
实施(在此JTDS文档页面的意义上)
呢?
另外,语句池和连接池有什么区别
(如该JTDS文档页面上所述)?
随时为您的答案添加更多详细信息
(无论您发现什么重要的内容;我没有明确询问过的事情)
因为我对此很困惑。
- 看起来\\ Statement Pooling \\是一个错字,应该是" Statement cache ",这是一个非常需要的功能:当应用程序触发相同的查询(例如重复查询)时,驱动程序将为连接重新使用准备好的语句如"从用户ID =?"的用户中选择*)。这样可以节省大量(IO /网络)时间,并且像HikariCP这样的连接池实现假定JDBC驱动程序具有此功能(HikariCP选择不实现语句缓存功能)。
据我从API文档得知,它们意味着jTDS提供了javax.sql.PooledConnection和javax.sql.ConnectionPoolDataSource实现。这些类将由(例如)Java EE应用程序服务器的连接池使用,而不是连接池本身。
ConnectionPoolDataSource创建PooledConnection对象,换句话说,它是连接池的数据源。 PooledConnection是物理连接的句柄,并保存在连接池中。当用户从池中请求连接时,连接池将PooledConnection从\\'available \\'移至\\'in use \\'列表,并从PooledConnection获取逻辑java.sql.Connection。该逻辑连接就是传递给用户的内容。
连接池可以使用PooledConnection来监视逻辑连接。例如,在调用close()时将PooledConnection返回到\\'available \\',或强行取消逻辑连接并使该逻辑连接无效(例如,如果使用时间过长)。
因此,jTDS本身没有连接池实现,但是它支持连接池。不幸的是,JDBC规范中的措辞如此混乱。
关于这个问题,我有一个更详细的答案。