JTDS 驱动程序 - 连接池与连接池

JTDS driver - Connection pooling vs Connection pool

我离开 Java EE 有一段时间了,但我对所有这些东西都有一个基本的了解。

我正在阅读这里的 JTDS 文档:

http://jtds.sourceforge.net/features.html

它说它提供语句池和连接池,但不提供连接池实现。

  1. 前提是JTDS驱动本身提供了连接池, 那为什么我需要一个连接池(比如 DBCP)在上面呢?
  2. 也就是说,那个连接有什么区别 JTDS 提供的池,以及一个成熟的连接池 实现(在这个 JTDS 文档页面的意义上)在上面 有吗?
  3. 还有,语句池和连接池有什么区别 (如本 JTDS 文档页面所述)?

随时为您的答案添加更多详细信息
(无论您认为重要的是什么;我没有明确询问的事情)
因为我对此很困惑。

据我从 API 文档中得知,它们意味着 jTDS 提供了 javax.sql.PooledConnectionjavax.sql.ConnectionPoolDataSource 实现。这些 类 将由连接池使用 - 例如 - Java EE 应用程序服务器,而不是连接池本身。

ConnectionPoolDataSource创建PooledConnection个对象,或者说它是一个连接池的数据源。 PooledConnection 是物理连接的句柄,保存在连接池中。当用户从池中请求连接时,连接池将 PooledConnection 从 'available' 移动到 'in use' 列表,并从 PooledConnection。这个逻辑连接就是交给用户的。

连接池可以使用PooledConnection来监视逻辑连接。例如在调用close()时将return从PooledConnection变为'available',或者强行撤销并使逻辑连接失效(如使用时间过长)。

所以jTDS本身并没有连接池实现,但是它有连接池的支持。不幸的是 JDBC 规范中的措辞如此混乱。

关于这个问题,我在 a similar question 上有更详细的回答。